MySQLTransactionRollbackException: обнаружена тупиковая ситуация при попытке получить блокировку;JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 MySQLTransactionRollbackException: обнаружена тупиковая ситуация при попытке получить блокировку;

Сообщение Anonymous »

У меня есть таблица trade_order:

Код: Выделить всё

 CREATE TABLE `trade_order` IF NOT EXISTS `buyer_order` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`order_no` varchar(30) NOT NULL DEFAULT '',
`name` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `order_no` (`order_no`),
)
Теперь я хочу вставить данные в таблицу trade_order. Я делаю это так:

Код: Выделить всё

transaction begin.
===
result = select * from order_table where order_no = #{orderNo} for update
if(result is null){
insert into trade_order (order_no,name) values (orderNo,name)
}
else{
update trade_order set name = #{name} where order_no = #{orderNo}
}
===
transaction end.
Но у меня есть исключение DeadLock:

Код: Выделить всё

 org.springframework.dao.DeadlockLoserDataAccessException:
### Error updating database.  Cause:      com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock      found when trying to get lock; try restarting transaction
### The error may involve      com.youzan.trade.process.datasync.dal.dao.OrderDAO.insert-Inline
### The error occurred while setting parameters
### SQL: insert into trade_order ( order_no, name )  values ( ?,         ?,  )
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
; SQL []; Deadlock found when trying to get lock; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
Может быть, два потока будут обрабатывать одни и те же два данных одновременно, и оба потока будут выполнять действие вставки.

Но приведет ли это к DeadLock? Интересно, почему.

(Уровень изоляции транзакции mysql — RR, движок InnoDB)>

Подробнее здесь: https://stackoverflow.com/questions/388 ... o-get-lock
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»