Ce face RELEASE_LOCK()
RELEASE_LOCK() returnează 1 dacă blocarea a fost eliberată, 0 dacă blocarea există, dar este ținută de altă conexiune (și nu este eliberată), și NULL dacă nu există nicio blocare cu acel nume.
Când nu ai nevoie de rezultat, poți scrie DO RELEASE_LOCK('nume');, care execută funcția fără să afișeze nimic.
Parametri
| Parametru | Descriere |
|---|---|
nume |
Numele blocării. |
Ce returnează
1, 0 sau NULL.
Exemple
Exemplul 1: Cele trei rezultate posibile
SELECT GET_LOCK('export_produse', 0);
SELECT RELEASE_LOCK('export_produse') AS prima_data,
RELEASE_LOCK('export_produse') AS a_doua_oara;
Rezultat
+-------------------------------+
| GET_LOCK('export_produse', 0) |
+-------------------------------+
| 1 |
+-------------------------------+
+------------+-------------+
| prima_data | a_doua_oara |
+------------+-------------+
| 1 | NULL |
+------------+-------------+
Exemplul 2: Blocarea ținută de altă conexiune
-- conexiunea 1
SELECT GET_LOCK('export_produse', 0);
-- conexiunea 2
SELECT RELEASE_LOCK('export_produse');
Rezultat în MySQL (două conexiuni deschise în paralel)
-- conexiunea 2
+--------------------------------+
| RELEASE_LOCK('export_produse') |
+--------------------------------+
| 0 |
+--------------------------------+
Exemplul 3: Eliberare fără rezultat, cu DO
SELECT GET_LOCK('export_produse', 0);
DO RELEASE_LOCK('export_produse');
SELECT IS_FREE_LOCK('export_produse') AS libera;
Rezultat
+-------------------------------+
| GET_LOCK('export_produse', 0) |
+-------------------------------+
| 1 |
+-------------------------------+
+--------+
| libera |
+--------+
| 1 |
+--------+
Greșeli frecvente
- Încerci să eliberezi din altă conexiune o blocare rămasă agățată. Nu merge (primești 0); blocarea dispare doar când conexiunea care o ține o eliberează sau se închide (
KILL id).
Comenzi înrudite
GET_LOCK(): Ia o blocare cu nume, pe tot serverul; alte conexiuni așteaptă până se eliberează.RELEASE_ALL_LOCKS(): Eliberează toate blocările cu nume ale conexiunii curente și spune câte au fost.IS_USED_LOCK(): Returnează ID-ul conexiunii care ține o blocare cu nume, sau NULL dacă este liberă.