IS_USED_LOCK() în MySQL

Blocări cu nume MySQL 5.0+

Returnează ID-ul conexiunii care ține o blocare cu nume, sau NULL dacă este liberă.

Sintaxă
IS_USED_LOCK(nume)

Ce face IS_USED_LOCK()

IS_USED_LOCK() spune cine ține blocarea: ID-ul conexiunii, același ca în SHOW PROCESSLIST și în CONNECTION_ID(). Dacă blocarea este liberă, rezultatul este NULL.

Cu ID-ul aflat, un administrator poate vedea ce face acea conexiune sau o poate închide cu KILL id dacă a rămas agățată.

Parametri

Parametru Descriere
nume Numele blocării.

Ce returnează

ID-ul conexiunii sau NULL.

Exemple

Exemplul 1: Cine ține blocarea

SELECT IS_USED_LOCK('facturare') AS inainte;
SELECT GET_LOCK('facturare', 0);
SELECT IS_USED_LOCK('facturare') = CONNECTION_ID() AS o_tine_conexiunea_mea;

Rezultat

+---------+
| inainte |
+---------+
|    NULL |
+---------+
+--------------------------+
| GET_LOCK('facturare', 0) |
+--------------------------+
|                        1 |
+--------------------------+
+-----------------------+
| o_tine_conexiunea_mea |
+-----------------------+
|                     1 |
+-----------------------+

Exemplul 2: Văzut din altă conexiune

SELECT IS_USED_LOCK('facturare');

Rezultat în MySQL (două conexiuni deschise în paralel)

+---------------------------+
| IS_USED_LOCK('facturare') |
+---------------------------+
|                     23786 |
+---------------------------+

Greșeli frecvente

  • Folosești rezultatul ca adevărat/fals. Este un ID sau NULL; pentru o verificare simplă scrie IS_USED_LOCK('x') IS NOT NULL sau folosește IS_FREE_LOCK().

Comenzi înrudite

  • IS_FREE_LOCK(): Verifică dacă o blocare cu nume este liberă (1) sau ținută de cineva (0).
  • GET_LOCK(): Ia o blocare cu nume, pe tot serverul; alte conexiuni așteaptă până se eliberează.
  • CONNECTION_ID(): Returnează numărul unic al conexiunii curente (ID-ul din SHOW PROCESSLIST).