НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
144 of 150 menu

Команда SELECT ... FOR UPDATE

Команда SELECT ... FOR UPDATE используется внутри транзакции для выборки строк с их последующей блокировкой. Заблокированные строки не могут быть изменены другими транзакциями до выполнения COMMIT или ROLLBACK. Это позволяет безопасно работать с данными в конкурентной среде.

Синтаксис

SELECT column_list FROM table_name WHERE condition FOR UPDATE

Таблицы для примеров

accounts
id name balance
1 Ivan 1000
2 Olga 1500
3 Sergey 800

Пример

Давайте рассмотрим работу SELECT ... FOR UPDATE в условиях конкуренции двух транзакций:

Транзакция A блокирует строку с id = 1:

-- Транзакция A START TRANSACTION; SELECT id, name, balance FROM accounts WHERE id = 1 FOR UPDATE;

В это же время транзакция B пытается изменить ту же самую строку:

-- Транзакция B START TRANSACTION; UPDATE accounts SET balance = balance + 500 WHERE id = 1;

Запрос UPDATE во второй транзакции будет ожидать завершения первой транзакции, так как строка id = 1 заблокирована.

После фиксации изменений в транзакции A блокировка снимается:

-- Транзакция A COMMIT;

Только после этого транзакция B сможет завершить выполнение UPDATE:

-- Транзакция B COMMIT;

Результат выполнения операций:

id name balance
1 Ivan 1500
2 Olga 1500
3 Sergey 800

Смотрите также

  • команду START TRANSACTION,
    которая включает режим транзакции
  • команду COMMIT,
    которая снимает блокировки после фиксации
  • команду ROLLBACK,
    которая снимает блокировки при откате
  • команду SELECT,
    которая делает выборку данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить