事务的基本特性和隔离级别

事务基本特性ACID分别是:

原⼦性指的是⼀个事务中的操作要么全部成功,要么全部失败。

⼀致性指的是数据库总是从⼀个⼀致性的状态转换到另外⼀个⼀致性的状态。⽐如A转账给B100块钱, 假设A只有90块,⽀付之前我们数据库⾥的数据都是符合约束的,但是如果事务执⾏成功了,我们的数据库 数据就破坏约束了,因此事务不能成功,这⾥我们说事务提供了⼀致性的保证

隔离性指的是⼀个事务的修改在最终提交前,对其他事务是不可⻅的。

持久性指的是⼀旦事务提交,所做的修改就会永久保存到数据库中。

隔离性有4个隔离级别,分别是:

read uncommit 读未提交,可能会读到其他事务未提交的数据,也叫做脏读。 ⽤户本来应该读取到id=1的⽤户age应该是10,结果读取到了其他事务还没有提交的事务,结果读 取结果age=20,这就是脏读。

read commit 读已提交,两次读取结果不⼀致,叫做不可重复读。 不可重复读解决了脏读的问题,他只会读取已经提交的事务。 ⽤户开启事务读取id=1⽤户,查询到age=10,再次读取发现结果=20,在同⼀个事务⾥同⼀个查询 读取到不同的结果叫做不可重复读。

repeatable read 可重复复读,这是mysql的默认级别,就是每次读取结果都⼀样,但是有可能产 ⽣幻读。

serializable 串⾏,⼀般是不会使⽤的,他会给每⼀⾏读取的数据加锁,会导致⼤量超时和锁竞争 的问题。

脏读(Drity Read):某个事务已更新⼀份数据,另⼀个事务在此时读取了同⼀份数据,由于某些原因, 前⼀个RollBack了操作,则后⼀个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在⼀个事务的两次查询之中数据不⼀致,这可能是两次查询过程中 间插⼊了⼀个事务更新的原有的数据。

幻读(Phantom Read):在⼀个事务的两次查询中数据笔数不⼀致,例如有⼀个事务查询了⼏列(Row)数 据,⽽另⼀个事务却在此时插⼊了新的⼏列数据,先前的事务在接下来的查询中,就会发现有⼏列数据 是它先前所没有的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事务是指一组操作被视为一个单独的工作单元,并且要么全部完成,要么全部撤销。事务具有以下四个基本特性: 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部失败回滚,不允许只执行其中一部分操作。 2. 一致性(Consistency):事务执行前后,系统的数据状态必须保持一致。 3. 隔离性(Isolation):事务之间是相互隔离的,一个事务执行过程中,其对数据库的修改在提交前,对其他事务是不可见的。 4. 持久性(Durability):事务一旦提交,它对数据库的修改就是永久性的,即使系统崩溃也不会丢失。 事务隔离级别是指多个并发事务之间的隔离程度,包括以下四种级别: 1. 读未提交(Read Uncommitted):一个事务还没有提交时,它做的修改就能被其他事务看到。 2. 读已提交(Read Committed):一个事务提交后,它的修改才能被其他事务看到。 3. 可重复读(Repeatable Read):一个事务执行期间,多次读取同一个数据,读到的数据始终保持一致。 4. 串行化(Serializable):所有事务按照顺序一个一个执行,不存在并发问题。 事务的传播机制是指在一个事务中调用其他事务时,它们之间的关系。主要有以下四种传播机制: 1. REQUIRED:默认传播机制,如果当前没有事务,则新建一个事务,如果已经存在事务,则加入该事务。 2. REQUIRES_NEW:每次都会新建一个事务,如果当前存在事务,则挂起该事务,等新事务执行完毕后再恢复。 3. SUPPORTS:如果当前存在事务,则加入该事务,如果没有事务,则以非事务方式执行。 4. NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起该事务,等非事务执行完毕后再恢复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值