







|
MySQL.RU - Webboard
Вернуться
Дедлок в транзакции с select for update (Андрей) 08/02/2010 - 18:04:45
From: Андрей - 08/02/2010 - 18:04:45
Subject:Дедлок в транзакции с select for update
-----------------
Доброго времени суток.
Есть innodb-таблица с условной структурой
`id` int(10) unsigned NOT NULL,
`val` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
В транзакции происходит следующая последовательность запросов(ветвления и проверки не указываю):
START TRANSACTION
SELECT * FROM tbl_name WHERE id = <id элемента> FOR UPDATE
(и в случае отсутствия записи)
INSERT INTO tbl_name (id, val) VALUES (<id элемента>, <val элемента>)
COMMIT
В случае параллельного выполнения нескольких транзакций даже с РАЗНЫМИ id, ОТСУТСТВУЮЩИМИ В ТАБЛИЦЕ, происходит дедлок при insert во второй транзакции. При этом лока таблицы ожидаемо(innodb все-таки) не происходит - параллельный insert вне транзакции проходит.
Хотелось бы понять, почему происходит дедлок и механику работы select for update и транзакционного механизма в целом в данном случае.
Заранее спасибо.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
36750
|
|