DrunkMaster
@DrunkMaster

Использование LOCK TABLE в MySQL?

От момента чтения до момента удаления другие скрипты не должны иметь доступ на чтение и запись к этой таблице БД.
Вопросы:
1. Такой синтаксис LOCK TABLES использовать можно?
2. Как убедится что таблица реально заблокировалась?
3. Если другой скрипт в момент лока попытается обратится, он будет ожидать пока лок не будет снят и потом всё же сделает запрос, или сразу выплюнет ошибку и завершится?
LOCK TABLES `".$SourceTable."` READ, `".$SourceTable."` WRITE;
    mysqli_query($link, " SELECT.... ");
    // операции с данными
    mysqli_query($link, " DELETE.... ");
UNLOCK TABLES;
  • Вопрос задан
  • 1949 просмотров
Пригласить эксперта
Ответы на вопрос 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
1. нет, не правильно.
блокировка либо READ, либо WRITE.
MySQL.
READ - все(как сам процесс, так и другие) могут только читать.
WRITE - процесс, который вызвал блокировку, может читать и писать, остальные курят.
2. попробовать из другой сессии произвести запрещенное действие (INSERT/UPDATE/DELETE для READ, что угодно для WRITE) - запрос "зависнет" до разблокировки. Или до таймаута.
3. Будет ждать до таймаута.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы