DataBase_事务的ACID属性

博客介绍了数据库事务,它是一系列不可拆分的操作,具有ACID特性,包括原子性、一致性、隔离性和持久性。还阐述了并发事务带来的问题,如脏读、修改丢失等,以及不同的事务隔离级别,如读取未提交、读取已提交等,各有不同的防错能力。

什么是事务?

一系列数据库操作组成的一个完整的、不可拆分的逻辑过程,该过程被称为一个事务,具有ACID特性

什么是ACID特性

Atomicity(原子性)

事务(transaction)中的所有操作,要么都完成,要么都不完成,不会结束于中间环节。若事务在执行过程中发生错误,则数据会被回滚(Rollback)至事务开始前的状态,就像事务从未执行过

Consistency(一致性)

事务开始之前与事务结束之后,数据库的完整性未被破坏,即写入的数据必须完全符合所有的预设规则

Isolation(隔离性)

数据库允许事务并发地对数据进行读取与修改,而隔离性可防止由事务并发执行带来的数据可见性问题。事务隔离分为不同级别:读取未提交(Read Uncommitted)、读取已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)

Durability(持久性)

事务结束之后,对数据的修改是永久性的,即使系统故障也不会丢失

事务隔离级别

并发事务带来的问题:

  • 脏读(Dirty Mead): 事务A正在对数据进行修改,尚未修改完成时事务B对数据进行读取,则事务B读取到的是 "脏数据" ,称为脏读
  • 修改丢失(Lost To Modify): 事务A与事务B同时对一个数据进行修改,先完成的事务的修改会丢失。示例:data == 1,事务A执行data++,事务B执行data--,事务A先于事务B完成,此时事务A的修改会丢失,data == 0,称为修改丢失
  • 不可重复读(Unrepeatableread): 事务A多次读取同一数据,但在事务A尚未完成时,事务B对数据进行了修改,导致事务A重复读取的数据不一致,称为不可重复读
  • 幻读(Phantom Read): 事务A多次读取同一范围内的数据,但在事务A尚未完成时,事务B向该范围中添加了数据,导致事务A在后续读取中读取出先前不存在的数据,称为幻读

不可重复读与幻读相似,区别在于数据的值与数据的量

事务隔离级别(级别由低到高):

  • READ-UNCOMMITTED(读取未提交): 允许读取并发事务尚未提交修改的数据,可能会导致脏读、幻读与不可重复读
  • READ-COMMITTED(读取已提交): 允许读取并发事务已提交修改的数据,可阻止脏读,但不可重复读与幻读仍有可能发生
  • REPEATABLE-READ(可重复读): 对同一数据的重复读取结果一致,除非数据为事务本身所修改,可阻止脏读与不可重复读,但幻读仍有可能发生
  • SERIALIZABLE(可串行化): 完全遵守ACID的隔离级别,所有的事务依次提交,事务之间不可能产生干扰,该级别可防止脏读、不可重复读以及幻读
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值