怎么在MySQL中实现行级锁定
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,怎么在MySQL中实现行级锁定?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言锁是在执行多线程时用于强行限定资源访问的同步机制,数
千家信息网最后更新 2026年11月03日怎么在MySQL中实现行级锁定
怎么在MySQL中实现行级锁定?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
前言
锁是在执行多线程时用于强行限定资源访问的同步机制,数据库锁根据锁的粒度可分为行级锁,表级锁和页级锁
行级锁
行级锁是mysql中粒度最细的一种锁机制,表示只对当前所操作的行进行加锁,行级锁发生冲突的概率很低,其粒度最小,但是加锁的代价最大。行级锁分为共享锁和排他锁。
特点:
开销大,加锁慢,会出现死锁;锁定粒度最小,发生锁冲突的概率最大,并发性也高;
实现原理:
InnoDB行锁是通过给索引项加锁来实现的,这一点mysql和oracle不同,后者是通过在数据库中对相应的数据行加锁来实现的,InnoDB这种行级锁决定,只有通过索引条件来检索数据,才能使用行级锁,否则,直接使用表级锁。特别注意:使用行级锁一定要使用索引
举个栗子:
创建表结构
CREATE TABLE `developerinfo` ( `userID` bigint(20) NOT NULL, `name` varchar(255) DEFAULT NULL, `passWord` varchar(255) DEFAULT NULL, PRIMARY KEY (`userID`), KEY `PASSWORD_INDEX` (`passWord`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入数据
INSERT INTO `developerinfo` VALUES ('1', 'liujie', '123456');INSERT INTO `developerinfo` VALUES ('2', 'yitong', '123');INSERT INTO `developerinfo` VALUES ('3', 'tong', '123456');(1)通过主键索引来查询数据库使用行锁
打开三个命令行窗口进行测试
| 命令行窗口1 | 命令行窗口2 | 命令行窗口3 |
|---|
mysql> set autocommit = 0;Query OK, 0 rows affectedmysql> select * from developerinfo where userid = '1' for update;+--------+--------+----------+| userID | name | passWord |+--------+--------+----------+| 1 | liujie | 123456 |+--------+--------+----------+1 row in set |mysql> set autocommit = 0;Query OK, 0 rows affectedmysql> select * from developerinfo where userid = '1' for update;等待|mysql> set autocommit = 0;Query OK, 0 rows affectedmysql> select * from developerinfo where userid = '3' for update;+--------+------+----------+| userID | name | passWord |+--------+------+----------+| 3 | tong | 123456 |+--------+------+----------+1 row in set|mysql> commit;Query OK, 0 rows affected mysql> select * from developerinfo where userid = '1' for update;+--------+--------+----------+| userID | name | passWord |+--------+--------+----------+| 1 | liujie | 123456 |+--------+--------+----------+1 row in set
(2)查询非索引的字段来查询数据库使用行锁
打开两个命令行窗口进行测试
| 命令行窗口1 | 命令行窗口2 |
|---|
|mysql> set autocommit=0;Query OK, 0 rows affectedmysql> select * from developerinfo where name = 'liujie' for update;+--------+--------+----------+userID name passWord+--------+--------+----------+1 liujie 123456+--------+--------+----------+1 row in set |mysql> set autocommit=0;Query OK, 0 rows affectedmysql> select * from developerinfo where name = 'tong' for update;等待|mysql> commit;Query OK, 0 rows affected mysql> select * from developerinfo where name = 'liujie' for update;+--------+--------+----------+| userID | name | passWord |+--------+--------+----------+| 1 | liujie | 123456 |+--------+--------+----------+1 row in set
##### (3)查询非唯一索引字段来查询数据库使用行锁锁住多行
mysql的行锁是针对索引假的锁,不是针对记录,所以可能会出现锁住不同记录的场景
打开三个命令行窗口进行测试
命令行窗口1 命令行窗口2 命令行窗口3
mysql> set autocommit=0;Query OK, 0 rows affectedmysql> select * from developerinfo where password = '123456' for update;+--------+--------+----------+| userID | name | passWord |+--------+--------+----------+| 1 | liujie | 123456 || 3 | tong | 123456 |+--------+--------+----------+2 rows in set mysql> set autocommit =0 ;Query OK, 0 rows affectedmysql> select * from developerinfo where userid = '1' for update;
等待
mysql> set autocommit = 0;Query OK, 0 rows affectedmysql> select * from developerinfo where userid = '2' for update;+--------+--------+----------+| userID | name | passWord |+--------+--------+----------+| 2 | yitong | 123 |+--------+--------+----------+1 row in setcommit; mysql> select * from developerinfo where userid = '1' for update;+--------+--------+----------+| userID | name | passWord |+--------+--------+----------+| 1 | liujie | 123456 |+--------+--------+----------+1 row in set
##### (4)条件中使用索引来操作检索数据库时,是否使用索引还需有mysql通过判断不同执行计划来决定,是否使用该索引,如需判定如何使用explain来判断索引,请听下回分解
关于怎么在MySQL中实现行级锁定问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
命令
数据
索引
数据库
查询
粒度
不同
问题
测试
中实
最大
最小
三个
字段
更多
机制
条件
概率
冲突
帮助
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳市人人互联网科技有限公司
互联网和科技技术
互联网科技财经
鸠鸠互联网科技
礼当家互联网科技
互联网金融科技创新
有木互联网科技
互联网科技公司做什么
上海电发互联网科技有限公司
广州优美互联网科技
新华互联网科技2019
科技互联网大厂
玉溪互联网科技怎么选
天津腾达互联网科技有限公司
合肥互联网科技公司公章图片
互联网科技年终奖
工业互联网科技成果转化
江苏互联网智能科技产品出厂价
互联网公司属于科技吗
西安左小互联网科技有限公司
互联网核心科技是什么
深圳艾佳互联网科技
科技互联网创业计划书
深圳市运趣互联网科技有限公司
互联网行业科技股
徐州市互联网科技有限公司
互联网科技资金流入
安徽零酒互联网科技有限公司
互联网领先科技成果宣传视频
互联网企业和网络科技有限公司