数据库事务的特性和隔离级别(简单,易懂,易记,不看后悔)

版权声明:本文为博主原创文章,未经博主允许可以转载。 https://blog.csdn.net/qq_36071795/article/details/83956058

数据库事务的四大特性(ACID)

原子性(Atomicity)

事务中的操作要么全部成功,要么失败回滚

一致性(Consistency)

一个事务执行之前和执行之后都必须处于一致性状态。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

隔离性(Isolation)

两个事务之间操作互不影响. 不采用数据隔离会出现脏读,不可重复读和幻读. 数据库的隔离级别有读未提交,读提交,可重复读和串行化

持久性(Durability)

一个事务一旦提交了,那么数据库中数据的改变就应该是永久性的.即便是数据库系统遇到故障的情况下也不应该改变数据

数据库的隔离级别

mysql支持这四种隔离级别,但是默认支持到可重复读

读未提交

一个事务可以读取另一个事务已经修改但是还未提交的数据.会导致脏读.使用读提交可以解决脏读

读提交

一个事务要等另一个事务提交后才能读取事务.会导致不可重复读.采用可重复读可以解决不可重复读

例如:我拿卡去消费,系统显示卡内余额剩余1万,就在这个时候,老婆把钱转到自己的账户了,这个时候,我这边收费系统准备扣款时,卡里竟然没钱了.在这个事例中,出现了一个事务范围内的两次查询却返回了不同的数据.这就是不可重复读

可重复读

开始读取数据(事务开启)的时候,不允许修改(update)操作,但是仍然会导致幻读

有一天,妻子查看我的消费记录(事务开启),发现我消费了1万元,就在这个时候,我又买了一万元的电脑,即进行了insert操作,并提交了事务.当妻子打印我的消费记录时(妻子事务提交).发现我花了2万元,仿佛出现了幻觉.这就是幻读.采用序列化可以避免幻读

Serializable串行化(序列化)

Serializable是最高的事务隔离级别,在该级别下,事务串行化顺序执行.相当于数据库被设计成了单线程数据库.一致性最好,但是并发性最差,性能很低,一般很少使用.如果对一致性要求比较严格,而且并发量比较小的情况下可以考虑使用

猜你喜欢

转载自blog.csdn.net/qq_36071795/article/details/83956058