LOCK TABLE. Введение
Когда в базе данных одновременно работают несколько пользователей, могут возникнуть ситуации, когда:
Кто-то читает данные, а другой в это время их меняет
Возникают конфликты при обновлении
Данные становятся неконсистентными
Оператор LOCK TABLE позволяет временно заблокировать таблицу, чтобы другие сессии не могли её изменить до окончания вашей операции.
🔤 Написание
Примеры режимов:
SHARESHARE ROW EXCLUSIVEEXCLUSIVEROW SHAREROW EXCLUSIVE
⚠️ По умолчанию сессия ждёт, если таблица уже заблокирована. Можно указать:
NOWAIT— не ждать, если блокировка невозможнаWAIT N— ждать N секунд
🔄 Где часто используется
При вставке/обновлении данных в несколько этапов
В финансовых транзакциях
Для обеспечения целостности при сложной логике
В ETL-скриптах перед массовыми изменениями
В хранимых процедурах, когда нужно избежать конкуренции
🧪 10 Примеров использования LOCK TABLE с пояснениями
1️⃣ Простая блокировка на обновление
Блокирует таблицу на запись — другие могут читать, но не изменять.
2️⃣ Эксклюзивная блокировка
Полная блокировка: никто, кроме вас, не может читать или писать.
3️⃣ SHARE MODE
Разрешает чтение другими сессиями, но не изменения.
4️⃣ SHARE ROW EXCLUSIVE MODE
Разрешает конкурентное чтение, но блокирует другие DML-операции.
5️⃣ LOCK TABLE с NOWAIT
Если таблица уже занята — выдаёт ошибку сразу, не ждёт.
6️⃣ LOCK TABLE с ожиданием
Ждёт до 10 секунд, прежде чем сдаться.
7️⃣ LOCK TABLE внутри транзакции
Блокируем таблицу, обновляем данные и фиксируем.
8️⃣ Блокировка нескольких таблиц
Одновременная блокировка двух таблиц.
9️⃣ Проверка блокировки: второе соединение
Демонстрация, как блокировка влияет на параллельные действия.
🔟 LOCK TABLE с подчинённой логикой
Без блокировки могли бы возникнуть конфликты или потеря данных.
🧩 Заключение
Оператор LOCK TABLE — это инструмент для полного контроля над конкурентным доступом к таблице. Он помогает избежать конфликтов при записи, сохранить целостность данных и обеспечить последовательность операций.
💡 Запомните:
Не забудьте всегда завершать блокировку через
COMMITилиROLLBACKИспользуйте
NOWAIT, если не хотите ждатьНе злоупотребляйте: долгие блокировки могут мешать другим