Подтвердить что ты не робот

MySQL concurrency, как это работает и мне нужно обрабатывать его в моем приложении

В настоящее время я запускаю базу данных MySQL. Все мои таблицы используют Table Engine InnoDB.

Каждый, кто входит в мое приложение, может просматривать записи, и я обеспокоен тем, что в какой-то момент два пользователя могут обновить или вставить запись в одно и то же время. Разве MySQL обрабатывает этот тип concurrency изящно, или это то, что мне нужно будет запрограммировать в свой код?

Если мне нужно запрограммировать его в свой код, как вы собираетесь обрабатывать такой случай concurrency?

4b9b3361

Ответ 1

Операторы SQL являются атомарными. То есть, если вы выполните что-то вроде этого:

UPDATE Cars SET Sold = Sold + 1

Во время этого утверждения никто не может изменить переменную Sold. Он всегда увеличивается на 1, даже если кто-то другой выполняет один и тот же оператор одновременно.

Проблема возникает, если у вас есть утверждения, которые зависят друг от друга:

a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;

Между этими запросами другой пользователь может изменить таблицу Cars и обновить Продано. Чтобы предотвратить это, оберните его в транзакцию:

BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;

Транзакции поддерживаются InnoDB, но не MyISAM.