GET_LOCK
GET_LOCK(str,timeout)
Intenta obtener un bloqueo con el nombre dado por la cadena str, con un tiempo límite de timeout segundos. Devuelve 1 si se ha obtenido el bloqueo, 0 si no se ha obtenido en el tiempo indicado (por ejemplo, porque otro cliente ha bloqueado ya el nombre), o NULL si ha habido un error (como falta de memoria o si el hilo fue matado por mysqladmin kill). Un bloqueo se libera cuando se ejecuta la función RELEASE_LOCK(), se ejecuta un nuevo GET_LOCK() o el hilo termina (ya sea normal o anormalmente). Esta función se puede usar para implementar bloqueos de aplicación o para simular bloqueos de registro. Los nombres se bloquean en bases del servidor. Si un nombre ha sido bloqueado por un cliente, GET_LOCK() bloquea cualquier petición de otro cliente para bloquear el mismo nombre. Esto permite que clientes que se ponen de acuerdo para bloquear un nombre dado usar el mismo nombre para realizar un bloqueo coordinado:
mysql> SELECT GET_LOCK("lock1",10); -> 1 mysql> SELECT IS_FREE_LOCK("lock2"); -> 1 mysql> SELECT GET_LOCK("lock2",10); -> 1 mysql> SELECT RELEASE_LOCK("lock2"); -> 1 mysql> SELECT RELEASE_LOCK("lock1"); -> NULL
El segunda llamada a RELEASE_LOCK() devuelve NULL porque el bloqueo "lock1" se ha liberado de forma automática por la segunda llamada a GET_LOCK().