千家信息网

MYSQL中怎么实现伪行级锁

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章给大家分享的是有关MYSQL中怎么实现伪行级锁,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一.数据准备mysql> use t
千家信息网最后更新 2026年11月01日MYSQL中怎么实现伪行级锁

本篇文章给大家分享的是有关MYSQL中怎么实现伪行级锁,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。



一.数据准备
mysql> use test;
Database changed
mysql> show create table t_kenyon \G
*************************** 1. row ***************************
Table: t_kenyon
Create Table: CREATE TABLE `t_kenyon` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
www.2cto.com
mysql> show variables like '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)

mysql> select * from t_kenyon;
+------+
| id |
+------+
| 1 |
| 123 |
| 789 |
| 345 |
| 78 |
| 78 |
+------+
6 rows in set (0.00 sec)
以上是测试表t_kenyon,设置提交方式为手动提交.

二.过程(开启两个session,分别设置autocommit=off)
www.2cto.com
1.session one update
mysql> update t_kenyon set id = 999 where id = 1;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from t_kenyon;
+------+
| id |
+------+
| 999 |
| 123 |
| 789 |
| 345 |
| 78 |
| 78 |
+------+
6 rows in set (0.00 sec)
2.session two update
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
www.2cto.com
mysql> select * from t_kenyon;
+------+
| id |
+------+
| 1 |
| 123 |
| 789 |
| 345 |
| 78 |
| 78 |
+------+
6 rows in set (0.00 sec)

mysql> update t_kenyon set id = 88888 where id = 345;
第二个session更新的值是345,但是也一直被阻塞,直到session1被rollback或者commit,如果session1未做回滚或者提交,session2中的该阻塞在超出mysql的锁时间限制时自动回滚,该参数为innodb_lock_wait_timeout,默认值50秒 现象如下
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
加索引后的测试
3.session one update

mysql> create index ind_kenyon on t_kenyon(id);
Query OK, 0 rows affected (28.58 sec)
Records: 0 Duplicates: 0 Warnings: 0
www.2cto.com
mysql> update t_kenyon set id = 999 where id = 1;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from t_kenyon;
+------+
| id |
+------+
| 78 |
| 78 |
| 123 |
| 345 |
| 789 |
| 999 |
+------+
6 rows in set (0.00 sec)
4.session two update
mysql> select * from t_kenyon;
+------+
| id |
+------+
| 1 |
| 78 |
| 78 |
| 123 |
| 345 |
| 789 |
+------+
6 rows in set (0.00 sec)
www.2cto.com
mysql> update t_kenyon set id = 7777 where id = 345;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from t_kenyon;
+------+
| id |
+------+
| 1 |
| 78 |
| 78 |
| 123 |
| 789 |
| 7777 |
+------+
6 rows in set (0.00 sec)
执行计划
mysql> explain select * from t_kenyon where id = 345 \G
*************************** 1. row ***************************
id: 1 www.2cto.com
select_type: SIMPLE
table: t_kenyon
type: ref
possible_keys: ind_kenyon
key: ind_kenyon
key_len: 5
ref: const
rows: 1
Extra: Using where; Using index
1 row in set (0.00 sec)
可以看到加了索引后,不同的数据更新并没有被阻塞,实现了真正意义上行锁

以上就是MYSQL中怎么实现伪行级锁,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

阻塞 数据 更多 知识 篇文章 更新 测试 不同 实用 两个 参数 就是 工作会 意义 手动 文章 方式 时间 现象 看吧 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 广州为想互联网科技有限公司 港股互联网科技股 互联网科技作文 奇酷互联网科技公司 世界互联网领先科技成果 凡科互联网科技 互联网科技缩写 互联网科技的未来发展 互联网前沿科技 互联网科技股午盘股票涨跌 中国最先进互联网科技公司 开一家科技互联网公司需要多少钱 允成互联网科技有限公司融资 佛山市拉法互联网科技有限公司 工业互联网等科技实现智能化赋能 伍佰万互联网科技怎么赚钱 易企秀互联网科技是做什么的 珠海东科互联网科技有限公司 广西泛欧互联网科技有限公司 盈实互联网科技 有木互联网科技 左右互联网络科技 承德科技产业互联网发展 昭通云南众福互联网科技有限公司 成都铂石互联网科技做什么的 无锡工业互联网科技有限公司 皮皮虾互联网科技有限公司 中天科技中国工业互联网 科技和互联网行业的特点
0