千家信息网

MySQL 5.5中LOCK TABLES和UNLOCK TABLES语句有哪些

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要介绍了MySQL 5.5中LOCK TABLES和UNLOCK TABLES语句有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起
千家信息网最后更新 2025年02月05日MySQL 5.5中LOCK TABLES和UNLOCK TABLES语句有哪些

这篇文章主要介绍了MySQL 5.5中LOCK TABLES和UNLOCK TABLES语句有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

LOCK TABLES 可以为当前客户端会话的表加锁。表锁可以加到表或视图中。你需要具有LOCK TABLES权限和对表的查询权限。当执行LOCK TABLES语句时,表中的触发器也会被锁住。
表锁可以防止其他会话对表的读或写。持有写锁的会话可以执行DROP TABLE或TRUNCATE TABLE语句,持有读锁的会话,不允许执行DROP TABLE或TRUNCATE TABLE语句。

读锁(READ [LOCAL] lock)

持有锁的会话可以读取表,但是不能执行写入操作。

多个会话可以在同一时间获取相同表的读锁。

其他没有获取读锁的会话可以读取表中的内容。

LOCAL标识符可以使其他会话执行并发的INSERT语句。对于InnoDB表,READ LOCAL和READ具有同样的效果。

例子一:
--会话①
mysql> lock table t10 read;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t10;
+------+---------------------+
| name | email |
+------+---------------------+
| Neo | feelpurple@163.com |
| fire | real_neo@163.com |
| xxx | real_xiaomm@163.com |
+------+---------------------+
3 rows in set (0.00 sec)

--会话②,可以执行查询语句,对表的DML、DDL操作会处于阻塞状态,直到会话①表锁被释放
mysql> select * from t10;
+------+---------------------+
| name | email |
+------+---------------------+
| Neo | feelpurple@163.com |
| fire | real_neo@163.com |
| xxx | real_xiaomm@163.com |
+------+---------------------+
3 rows in set (0.00 sec)

mysql> insert into t10 values('Jason','real_xiaoyu@163.com');

--会话①
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

--会话②
mysql> insert into t10 values('Jason','real_xiaoyu@163.com');
Query OK, 1 row affected (2 min 7.82 sec)

当一个会话获取表锁后,这个会话只能访问被锁的这张表,直到表锁被释放为止。

例子二:
--会话①
mysql> lock table t10 read;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from t10;
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from t11;
ERROR 1100 (HY000): Table 't11' was not locked with LOCK TABLES
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from t10;
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from t11;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)

写锁(WRITE lock)

持有锁的会话可以对表执行读写操作。

只有获取锁的会话才能访问表。只有当锁释放掉,其他的会话才可以访问表。

当表被加上写锁的时候,其他对这张表的锁定请求会被阻塞。

--例子三:

--会话①
mysql> lock table t10 write;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from t10;
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)

--会话②,对表的查询、DML、DDL操作都会处于阻塞状态,直到会话①表锁被释放
mysql> select * from t10;

--会话①
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

--会话②
mysql> select * from t10;
+---------------------+
| email |
+---------------------+
| feelpurple@163.com |
| real_neo@163.com |
| real_xiaomm@163.com |
| real_xiaoyu@163.com |
+---------------------+
4 rows in set (1 min 35.10 sec)

--会话①
mysql> lock table t10 write;
Query OK, 0 rows affected (0.00 sec)

--会话②的DML操作会处于阻塞状态
mysql> insert into t10 values('real_xiaolan@163.com');

--会话①
mysql> unlock tables;
Query OK, 0 rows affected (0.01 sec)

--会话②的DML操作成功
mysql> insert into t10 values('real_xiaolan@163.com');
Query OK, 1 row affected (35.04 sec)

--会话①,此时如果会话②不提交或回滚事务,则会话①再次执行LOCK TABLE语句会阻塞
mysql> lock table t10 write;

--会话②
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

--会话①
mysql> lock table t10 write;
Query OK, 0 rows affected (24.75 sec)

UNLOCK TABLES 会释放当前会话的表锁,也可以释放FLUSH TABLES WITH READ LOCK(这个命令会给MySQL中所有的数据库加锁)语句所加的全局只读锁。

感谢你能够认真阅读完这篇文章,希望小编分享的"MySQL 5.5中LOCK TABLES和UNLOCK TABLES语句有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

语句 阻塞 篇文章 例子 状态 查询 只有 权限 相同 成功 事务 价值 全局 兴趣 内容 再次 可以使 同时 命令 多个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏现代软件开发产业化 奥迪a4互联网科技怎么用 学习网络安全零基础 信阳畅通网络技术有限公司 魔天记手游服务器 慈溪一站式软件开发商 广东本地软件开发市价 dhcp服务器异常啥意思 企业网络安全应用研究的目的 丰巢进销存管理软件数据库恢复 远程管理服务器ftp 软件开发中pad图是干嘛用的 游戏服务器管理员需要什么知识 车辆工程网络安全案例 数据库怎么建立性别 网络安全构成什么内容 中国青少年网络安全知识竞赛 班级网络安全责任 软件开发类业务质保期约定 全国网络安全技术考试时间 通信工程数据库专业试题 数据库查询总分最高分语句 机载导航数据库过期了 网络安全书法作品内容 网络安全应急安全值班方案 固始游戏软件开发公司电话 如何测试服务器最大用户数 网络安全知识大赛的意义 滇西科技互联网金融学什么 不同服务器数据库怎么关联
0