Все ленты — последние статьи

Блокировка таблиц

Блокировка таблиц

Для таблиц типа MyISAM использование транзакций недоступно. Однако их можно эмулировать при помощи операторов LOCK TABLES И UNLOCK TABLES. В отличие от полноценных транзакций, данные операторы блокируют всю таблицу, в результате чего никто не может работать с таблицами до тех пор, пока они остаются заблокированными. Оператор LOCK TABLES выполняет блокировку таблиц, а UNLOCK TABLES снимает блокировку.

 

Замечание
Все таблицы, заблокированные в текущем соединении, разблокируются при повторном вызове оператора LOCK TABLES.

Замечание
Операторы LOCK TABLES и UNLOCK TABLES имеют синонимы LOCK TABLE и UNLOCK TABLE соответственно.
LOCK TABLES categories WRITE;
INSERT INTO categories VALUES (NULL, 'Мониторы');
INSERT INTO categories VALUES (NULL, 'Принтеры');
UNLOCK TABLES;

Листинг демонстрирует блокировку таблицы categories на время добавления данных в таблицу. Следует обратить внимание, что после оператора LOCK TABLES указывается имя блокируемой таблицы, при снятии блокировки указания имени таблицы уже не требуется. Основная причина применения блокировки таблицы при помощи LOCK TABLES — это увеличение скорости обновления таблиц и добавления больших объемов данных.

При использовании блокировок можно явно указать тип блокировки — на чтение (READ) или на запись (WRITE). Различие между блокировками на чтение и запись заключается в том, что и клиент, установивший блокировку на чтение, и остальные клиенты могут только читать из таблицы данные. При блокировке на запись установивший ее клиент может как вносить записи в таблицу, так и читать, в то время как доступ других клиентов блокируется. Причем все остальные клиенты ожидают, когда блокировка будет отменена оператором UNLOCK TABLES.

Один оператор LOCK TABLES может блокировать сразу несколько таблиц, причем рекомендуется блокировать все таблицы, которые участвуют в запросах внутри блокировки. Это связано с тем, что пока блокировка, установленная LOCK TABLES, активна, невозможно получить доступ ни к каким таблицам, которые не были блокированы этим оператором.

Блокировки по записи (WRITE) имеют более высокий приоритет, чем блокировки по чтению (READ), чтобы гарантировать, что обновления данных пройдут как можно быстрее. Это означает, что если один или несколько клиентов устанавливают блокировку на чтение (READ), а затем другой клиент устанавливает блокировку на запись (WRITE) по этим же таблицам, то остальные клиенты будут ожидать, пока блокировка по записи не будет снята.