Mysql-锁/隔离级别

网友投稿 581 2022-11-19

Mysql-锁/隔离级别

Mysql-锁/隔离级别

1.共享锁:只要有一个人(事务或线程)在查询,其他人就都不能改,要照顾少数 下面是将所有性别是男的数据都加上共享锁

select * from table where sex='男' lock in share mode

2.排他锁:只要有一个人(事务或线程)在用(增删改差),其他人就不能用 下面是将所有性别是男的数据都加上排他锁

select * from table where sex='男' for update

3.意向锁:个人理解说意向锁,不如说成是个标识符,如果标识符存在,就说明该表中的一行或者多行数据正在被其他事务使用,当前事务不能对该表加锁,如果标识符不存在,则说明表中没有任何一条数据被其他事务使用,既然不存在,那么其他事物就可以对该表加锁了,然后操作该表里的任意数据

读操作

快照读:单一的select * from 表 where条件当前读:读的是最新的数据,读之前都需要加锁,增删改和上文的加锁都是当前读

隔离级别

查看mysql的默认隔离级别执行如下语句:select @@tx_isolation1.不可重复读:Read Committed保证对读取到的记录加锁 (记录锁),存在幻读现象。

2.可重复读:Repeatable Read保证对读取到的记录加锁 (记录锁),同时保证对读取的范围加锁,新的满足查询条件的记录不能够插入 (间隙锁),不存在幻读现象。

幻读: 解释1针对结果集.事务A对结果集查询,显示出2条记录,之后事务B插入相同条件的记录,然后事务A再次用相同条件查询,结果显示出3条记录,和第一次查询的数据不一致 解释2.事务A在插入事先检测不存在的记录时,惊奇的发现这些数据已经存在了,(事务A检测完之后事务B正好插入)之前的检测读获取到的数据如同鬼影一般。 网上支持解释2的通常都自己觉得解释1是错误的,不过我个人看来两个解释还真没什么区别。。。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring-core-AnnotationMetadata接口
下一篇:Spring声明式数据库事务的使用-隔离级别
相关文章

 发表评论

暂时没有评论,来抢沙发吧~