#mysql #innodb #atomic
#mysql #innodb #атомарный
Вопрос:
Является ли оператор update `table` set `field` = `field` 1 where `id` = 1;
атомарным в InnoDB? Или это выполняется как select new_field from `table` where `id` = 1; update table set `field` = new field where `id` = 1;
Ответ №1:
Да, одиночные UPDATE
DELETE
операторы / являются атомарными, и никакие другие ожидающие транзакции не могут изменять строку во время выполнения операции.
InnoDB будет выполнять последовательное, неблокирующее и повторяемое чтение одной и той же строки на протяжении всей транзакции независимо от того, что любая другая транзакция сделала с этой строкой. С помощью InnoDB вы также можете использовать SELECT ... FOR UPDATE
или SELECT ... LOCK IN SHARE MODE
для выполнения блокирующего чтения в начале вашей транзакции, чтобы предотвратить изменения этой строки другими транзакциями, если вам требуется дополнительная обработка перед фиксацией.
Ответ №2:
Да, оператор update, увеличивающий поле, является атомарным.