LOCK
Sintassi
LOCK TABLES nome_tabella [[AS] alias] tipo_lock [, nome_tabella [[AS] alias] tipo_lock] ... tipo_lock: READ [LOCAL] | [LOW_PRIORITY] WRITE | WRITE CONCURRENT UNLOCK TABLES
Spiegazione
Opzione | Spiegazione |
---|---|
READ | Lock in lettura, nessuna scrittura consentita |
READ LOCAL | Legge ma permette le insert concorrenti |
WRITE | Lock esclusivo in scrittura. Nessun'altra connessione può leggere o scrivere la tabella |
LOW_PRIORITY WRITE | Lock esclusivo in lettura, ma permette di acquisire nuovi lock sulla tabella finché non otteniamo un lock in scrittura. |
WRITE CONCURRENT | Lock in scrittura esclusivo, ma permette i lock READ LOCAL sulla tabella. |
MariaDB permette alle connessioni client di acquisire esplicitamente dei lock, allo scopo di cooperare con le altre connessioni coordinando gli accessi alle tabelle. Ogni sessione può acquisire o rilasciare lock solo per se stessa. Una sessione non può acquisire un lock per un'altra connessione o rilasciarne uno che è stato acquisito da un'altra connessione.
I lock possono essere usati per emulare le transazioni o per velocizzare la modifica delle tabelle.
LOCK TABLES
acquisisce esplicitamente uno o più lock per la sessione corrente. I lock possono essere acquisiti sulle tabelle fisiche o sulle viste. Per utilizzare l'istruzione LOCK TABLES
, occorre disporre del privilegio LOCK TABLES
, e del privilegio SELECT
su ogni oggetto sul quale si vuole porre un lock. Si veda GRANT
Nel caso dei lock sulle viste LOCK TABLES
pone un lock automatico su tutte le tabelle fisiche che fanno parte della vista specificata. Se si acquisisce un lock esplicitamente con LOCK TABLES
, viene acquisito un lock implicito anche sulle tabelle utilizzate dai trigger, come spiegato in http://dev.mysql.com/doc/refman/5.1/en/lock-tables-and-triggers.html.
UNLOCK TABLES
rilascia esplicitamente tutti i lock detenuti dalla sessione corrente.
Another use for UNLOCK TABLES
is to release the global read lock acquired
with the FLUSH TABLES WITH READ LOCK
statement, which enables you to lock
all tables in all databases. See FLUSH
. (This is a very
convenient way to get backups if you have a file system such as Veritas that
can take snapshots in time.)