LOCK
Sintaxe:
LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ... lock_type: READ [LOCAL] | [LOW_PRIORITY] WRITE | WRITE CONCURRENT UNLOCK TABLES
Descrição:
Option | Description |
---|---|
READ | Read lock, no writes allowed |
READ LOCAL | Read but allow concurrent inserts |
WRITE | Exclusive write lock. No other connections can read or write to this table |
LOW_PRIORITY WRITE | Exclusive write lock, but allow new read locks on the table until we get the write lock. |
WRITE CONCURRENT | Exclusive write lock, but allow READ LOCAL locks to the table. |
MariaDB permite as sessões cliente adquirir bloqueios de tabela explicitamente com a finalidade de cooperar com outras sessões no acesso de tabelas, ou para impedir com que outras sessões alterem tabelas durante períodos onde uma sessão requer acesso exclusivo à elas. Uma sessão pode adquirir ou liberar bloqueios somente por si mesma. Uma sessão não pode adquirir bloqueios para outra sessão ou liberar bloqueios realizados por outra sessão.
Bloqueios podem ser usados para emular transações ou para obter mais velocidade ao atualizar as tabelas
LOCK TABLES
explicitamente, adquire bloqueios de tabela para a sessão cliente atual. Bloqueios de tabela podem ser adquiridos por tabelas base ou visões. Para usar LOCK TABLES
, você deve ter o privilégio LOCK TABLES
, e o privilégio SELECT
para cada objeto a ser bloqueado. Veja GRANT
Para bloqueio de visões, LOCK TABLES
adiciona todas as tabelas base usadas na visão para o conjunto de tabelas a serem bloqueadas e bloqueá-las automáticamente. Se você bloqueia uma tabela explicitamente com LOCK TABLES
, qualquer tabela usada nos triggers são também bloqueadas implicitamente, conforme descrito em
http://dev.mysql.com/doc/refman/5.1/en/lock-tables-and-triggers.html.
UNLOCK TABLES
explicitamente libera qualquer bloqueio de tabela realizado pela sessão atual.
Outro uso para UNLOCK TABLES
é o de liberar o bloqueio de leitura global adquirido com a instrução FLUSH TABLES WITH READ LOCK
, a qual permite a você bloquear todas as tabelas em todos os bancos de dados. Veja FLUSH
. (Esta é uma forma muito conveniente de fazer backups se você possui um sistema de arquivos como o Veritas, que pode tirar snapshots no tempo).