LOCK TABLES

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

OpzioneSpiegazione
READLock in lettura, nessuna scrittura consentita
READ LOCALLegge ma permette le insert concorrenti
WRITELock esclusivo in scrittura. Nessun'altra connessione può leggere o scrivere la tabella
LOW_PRIORITY WRITELock esclusivo in lettura, ma permette di acquisire nuovi lock sulla tabella finché non otteniamo un lock in scrittura.
WRITE CONCURRENTLock 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.

Un altro possibile utilizzo di UNLOCK TABLES è rilasciare il lock in lettura globale acquisito con l'istruzione FLUSH TABLES WITH READ LOCK, che tiene bloccate tutte le tabelle di tutti i database. Si veda FLUSH - è un modo molto comodo per creare dei backup se si ha un file system come Veritas che può effettuare degli snapshot.

LOCK TABLES non può essere usato nelle Stored Routines.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.