事务管理(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=’隔离级别名称;’
记住:设置数据库的隔离级别一定要是在开启事务之前!