select的for update

阅读: 评论:0

select的for update

select的for update

select的for update

  • select ...... for update查询
  • 校验


select … for update查询

select查询是不加锁的,select…for update是会加锁的,而且是悲观锁,但是在不同查询条件时候加的锁的类型(行锁,表锁)是不同的。

select * from t_user where id = 1 for update;

在where 后面查询条件是主键索引,唯一索引时候是行锁
查询条件是普通字段时候加的是表锁

校验

**首先:**关闭自动提交,通过set @@autocommit=0; 设置为手动提交。0代表手动提交,1代表自动提交

1.主键id正常
2.主键id异常
3.唯一索引正常
4.唯一索引异常
5.普通索引表锁异常

唯一索引 age = 10 update 10 修改 应该可以

select * from t_user where id = 1 for update;
update t_user set age = 20 where id = 1;
更新失败
update t_user set age = 20 where id = 2;
更新成功

因为id是主键索引,for update 加的是行锁,所以id=1不能被修改,而id=2修改成功。

age 是唯一索引select * from t_user where age = 10 for update;查询结果
+++++++++++++++++++
+id ++ age++ code +
+1  ++ 10 ++  03  +
+++++++++++++++++++
update t_user set age = 20 where id = 1;
更新失败

因为age= 10对应的id是1;
所以该行修改时候就会失败

select * from t_user where code = 01 for update;
update t_user set code = 2 where id = 1;
更新失败

由上次查询结果可知
id=1,和code=01,并不在同一行
但是在修改时候修改 id=1 并不成功,所以加的是表锁

本文发布于:2024-01-29 07:01:10,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170648287513534.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:select   update
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23