当前位置:Gxlcms > 数据库问题 > MySQL事务

MySQL事务

时间:2021-07-01 10:21:17 帮助过:3人阅读

 3.Repeatable-read

预热:查询并将事务隔离级别修改为repeatable-read,将数据库中count字段初始化为50

技术分享图片

1.分别在开启事务A,事务B

事务A:

技术分享图片

事务B:

技术分享图片

2.在事务B端更改count值,但是不提交事务

事务B:

技术分享图片

操作事务A查询count,发现查询结果没变

事务A:

技术分享图片

3.提交事务B,并且操作事务A查看count,发现查询到的count值依然没变

事务B:

技术分享图片

事务A:

技术分享图片

结论:当事务隔离级别为repeatable-read时,一个事务只能读到开启本事务时读到的数据,无法读取其他事务更新的数据

4.Serializable

预热:查询并将事务隔离级别更改为serializable,将product表中count更改为50

技术分享图片

1.分别开启事务A,事务B

技术分享图片

2.在事务B端执行更新操作

事务B:发现没有一直处于执行中,并没有执行成功

技术分享图片

2.将事务A提交后,发现事务B更新成功

事务A:

技术分享图片

事务B:

技术分享图片

3.再提交事务B,操作事务A

事务B:

技术分享图片

事务A:

技术分享图片

结论:在serilizalbe级别下,select语句不仅会开启事务,还会降数据锁上,只允许其他事务查询,不允许更改

 5.For update

事务隔离级别没必要提升到serilizable,只需要使用read-committed,select语句加for update即可

预热:将事务隔离级别更改为read-committed

技术分享图片

 1.开启事务A,并将查询语句中加入for update

事务A:

技术分享图片

事务B:

技术分享图片

结果:只有当事务A提交之后,事务B才能查询到数据

结论:在select语句中加入for update时,只有当次事务提交之后,其他事务才能查询数据,for update会将数据加锁,防止其他事务操作发生数据不一致

 6.乐观锁

在语句中加入版本控制,如果版本是当前版本则可以进行修改,否则进行回滚,还有加锁可是很浪费时间的哦

转发一篇文章悲观锁和乐观锁;,自己很喜欢的公众号---码农翻身

7.例题

技术分享图片

 

MySQL事务

标签:保存   cell   href   size   logs   rod   zab   影响   准备   

人气教程排行