-----------------+ | GET_LOCK('lock3',10) | +----------------------+ | 1 | +----------------------+ SELECT GET_LOCK('lock3',10); +----------------------+ | GET_LOCK('lock3',10) | +----------------------+ | 1 | +----------------------+ SELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO; +-----------+---------------------+---------------+-----------+--------------+- ----------+ | THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA | TABLE_NAME | +-----------+---------------------+---------------+-----------+--------------+- ----------+ | 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 | | +-----------+---------------------+---------------+-----------+--------------+- ----------+ SELECT RELEASE_LOCK('lock3'); +-----------------------+ | RELEASE_LOCK('lock3') | +-----------------------+ | 1 | +-----------------------+ SELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO; +-----------+---------------------+---------------+-----------+--------------+- ----------+ | THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA | TABLE_NAME | +-----------+---------------------+---------------+-----------+--------------+- ----------+ | 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 | | +-----------+---------------------+---------------+-----------+--------------+- ----------+ SELECT RELEASE_LOCK('lock3'); +-----------------------+ | RELEASE_LOCK('lock3') | +-----------------------+ | 1 | +-----------------------+ SELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO; Empty set (0.000 sec) Timeout example: Connection 1: SELECT GET_LOCK('lock4',10); +----------------------+ | GET_LOCK('lock4',10) | +----------------------+ | 1 | +----------------------+ Connection 2: SELECT GET_LOCK('lock4',10); After 10 seconds... +----------------------+ | GET_LOCK('lock4',10) | +----------------------+ | 0 | +----------------------+ Deadlocks are automatically detected and resolved. Connection 1: SELECT GET_LOCK('lock5',10); +----------------------+ | GET_LOCK('lock5',10) | +----------------------+ | 1 | +----------------------+ Connection 2: SELECT GET_LOCK('lock6',10); +----------------------+ | GET_LOCK('lock6',10) | +----------------------+ | 1 | +----------------------+ Connection 1: SELECT GET_LOCK('lock6',10); +----------------------+ | GET_LOCK('lock6',10) | +----------------------+ | 0 | +----------------------+ Connection 2: SELECT GET_LOCK('lock5',10); ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction URL: https://mariadb.com/kb/en/get_lock/https://mariadb.com/kb/en/get_lock/