Является ли оператор update `table` установленным `field` = `field` 1 атомарным в InnoDB?

#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, увеличивающий поле, является атомарным.