前言:
当前同学们对“mysql释放锁语句”可能比较看重,大家都需要知道一些“mysql释放锁语句”的相关资讯。那么小编也在网摘上网罗了一些对于“mysql释放锁语句””的相关内容,希望朋友们能喜欢,姐妹们一起来学习一下吧!MySQL数据库的锁分为全局锁、表级锁、行级锁,这一篇介绍的是MySQL全局锁的使用。
MySQL全局锁用于对一个数据库实例加锁,加了全局锁后该数据库实例将处于只读状态,可以执行查询语句,但执行DML、DDL语句则会被阻塞。MySQL全局锁的典型使用场景是用于数据库的全库备份。
加锁的语法为:flush tables with read lock;
释放锁的语法为:unlock tables;
如果关闭了数据库连接,全局锁也会自动释放。
需要注意的一点是,释放锁时只会释放当前会话的锁,不会释放其他会话的锁。
下面是一个备份数据库的例子。
备份数据库按以下步骤执行:
(1) 加全局锁
flush tables with read lock
(2) 备份数据库
mysqldump -uroot -p123456 study > D:\1.sql
(3) 释放全局锁
unlock tables
在实际使用过程中,可能存在多个会话的情况,下面就多个会话的一些情况做说明。
(1) flush tables with read lock在同一会话内可以反复执行,效果一样。
(2) 会话1执行flush tables with read lock后,会话2也可以执行flush tables with read lock。
(3) 会话1执行flush tables with read lock后,当前会话可以执行查询语句,但执行DML、DDL会报错:1223 - Can't execute the query because you have a conflicting read lock。
(4) 会话1执行flush tables with read lock后,其他会话可以执行查询语句,但执行DML、DDL会阻塞。当会话1释放全局锁后,其他会话正在执行的语句会继续执行。
标签: #mysql释放锁语句