关于mysql的事务ACID你了解多少?

事务管理(ACID)

事务具有的四个特征(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(lsolation)、持久性(Durability)

逐个理解四大特性

原子性

原子性指的是事务要么是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

针对同一事物(比如银行转账的时候)
在这里插入图片描述
符合事务的原子性,要么一起成功要么一起失败,不能只完成其中一个动作

一致性

针对一个事务操作前与操作后的状态一样
关于一致性和原子性的区别可以看:[怎么理解数据库事务的一致性]
比如 A 和 B 加起来的钱一共是 1000 元,那么不管 A 和 B 之间如何转账,转多少次,事务结束后两个用户的钱加起来还得是 1000,这就是事务的一致性
在这里插入图片描述
理解为在数据上钱没多没少…

隔离性

针对多个用户同时操作。主要是排除其他事务对本次事务的影响
在这里插入图片描述
两个事务同时进行,一个事务读取到另一个事务还没有提交的数据
在这里插入图片描述

持久性

表示事务结束后的数据不随着外界原因导致数据丢失

操作前A:500,B:100
操作后A:300,B:300
如果在操作前(事务还没有提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为
A:500,B:100
如果在操作后(事务已经提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为
A:300,B:300

事务隔离级别

MySQL数据库为我们提供的四种隔离级别:

  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

  ③ Read committed (读已提交):可避免脏读的发生。

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。
在MySQL数据库中,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

如何在MySQL数据库中查看当前事务的隔离级别:

select @@tx_isolation;

在MySQL数据库中设置事务的隔离级别:

set  [glogal | session]  transaction isolation level 隔离级别名称;

set tx_isolation=’隔离级别名称;

记住:设置数据库的隔离级别一定要是在开启事务之前!

扫描二维码关注公众号,回复: 11354182 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_44255950/article/details/104607945