一、for update 是什么?
“SELECT … FOR UPDATE” 是一种在 SQL 中常用的锁定查询语句。它可以在查询数据时同时对查询结果中的记录加上排他锁 ,防止其他事务修改或删除这些记录。使用方法为在 SELECT 语句中加上 FOR UPDATE 子句。
例如:
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
这会查询 accounts 表中 id 为 1 的记录,并对这些记录加上排他锁。
B站视频地址:【数据库 for update 详细教程(行锁还是表锁问题演示)-哔哩哔哩】 https://b23.tv/4XToMlN
二、我们通常什么情况下会用到它?
1 .在我们的实际业务场景中,有些情况并发量不太高,为了保证数据的正确性,使用悲观锁也可以
三、select……for update会锁表还是锁行?
我将从三方面演示这个问题(以下内容都为本人亲测 mysql 5.7 数据库引擎为 innodb 隔离级别为数据库默认隔离级别 (可重复读) )
首先需要关闭数据库事务的自动提交变更为手动提交事务 set autocommit=0
sql执行脚本:
1.有主键的情况下
将id为1的行数据锁住 等待执行commit 语句
窗口2:执行如下命令:
2.有普通索引或者唯一索引的情况下
3.没有索引的情况下
四、项目中的真实应用
1.首先开启spring事务
2.执行修改操作(业务逻辑) (根据主键或者有索引的字段进行for update查询 此操作为行锁)
3.最后返回执行结果给前端做展示
五、想要使用for update一定要开启事务否则不生效
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。