IS_FREE_LOCK() în MySQL

Blocări cu nume MySQL 5.0+

Verifică dacă o blocare cu nume este liberă (1) sau ținută de cineva (0).

Sintaxă
IS_FREE_LOCK(nume)

Ce face IS_FREE_LOCK()

IS_FREE_LOCK() returnează 1 dacă nimeni nu ține blocarea și 0 dacă o ține o conexiune (inclusiv cea curentă). La argumente greșite returnează NULL.

Între verificare și GET_LOCK(), altă conexiune poate lua blocarea. Pentru a ocupa sigur o blocare, apelează direct GET_LOCK(nume, 0) și verifică rezultatul.

Parametri

Parametru Descriere
nume Numele blocării.

Ce returnează

1, 0 sau NULL.

Exemple

Exemplul 1: Înainte și după GET_LOCK()

SELECT IS_FREE_LOCK('trimitere_newsletter') AS inainte;
SELECT GET_LOCK('trimitere_newsletter', 0);
SELECT IS_FREE_LOCK('trimitere_newsletter') AS dupa;

Rezultat

+---------+
| inainte |
+---------+
|       1 |
+---------+
+-------------------------------------+
| GET_LOCK('trimitere_newsletter', 0) |
+-------------------------------------+
|                                   1 |
+-------------------------------------+
+------+
| dupa |
+------+
|    0 |
+------+

Greșeli frecvente

  • Verifici cu IS_FREE_LOCK() și apoi iei blocarea în pasul următor. Între cele două apeluri, altă conexiune o poate lua; folosește direct GET_LOCK().

Comenzi înrudite

  • IS_USED_LOCK(): Returnează ID-ul conexiunii care ține o blocare cu nume, sau NULL dacă este liberă.
  • GET_LOCK(): Ia o blocare cu nume, pe tot serverul; alte conexiuni așteaptă până se eliberează.