关于mysql的事务四个特性

背景知识:

  1. mysql事务支持的引擎是InnoDB
  2. mysql事务的四个特性(ACID),分别是原子性,一致性,隔离性,持久性

1.原子性:事务开启(start transaction)到事务结束(commit / rollback)之间的语句要么全部执行成功,要么全部执行失败,不存在一些语句执行成功,一些语句执行失败。

2.一致性:例如小明有2000元存款,小王有1000元存款,总数是3000元,这时候小明转账给小王1000元存款,小明剩下1000元存款而小王则有2000元存款,但是总数仍然是3000元,这就是一致性的体现

3.持久性:事务一旦提交,对数据的修改是永久的

4.隔离性:一个事务对数据库的修改在未提交之前,其他事务是看不见的,如下是事务的四个级别(隔离性由低到高,并发性由高到低):

  1. 读未提交(read uncommitted)
  2. 读已提交(read committed)
  3. 可重复读(repeatable read)
  4. 可串行化(serializable)

可以通过如下命令查看和设置隔离级别:

5.至于四个隔离级别具体是怎么回事,可以查看这篇博文:隔离级别详细

### MySQL 事务ACID 特性解释 #### 原子性 (Atomicity) 原子性意味着一个事务是一个不可分割的工作单元,即整个事务中的所有操作要么全部完成并提交,要么完全不执行任何更改。这种特性确保了即使在部分操作失败的情况下,数据库状态也不会处于中间状态或损坏的状态。 ```sql BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; COMMIT; ``` 上述例子展示了转账过程,在此过程中两个账户的操作必须作为一个整体来处理[^3]。 #### 一致性 (Consistency) 一致性保证了事务将数据库从一种一致状态转换到另一种一致状态。这意味着事务不会破坏关系型数据库中已有的约束条件和其他规则。例如,外键约束、唯一性约束等都将在事务前后保持有效。当一个事务完成后,它所涉及的数据应该满足所有的预定义规则和完整性约束。 #### 隔离性 (Isolation) 隔离性指的是多个并发运行的事务之间相互独立,互不影响。为了实现这一点,MySQL提供了不同的隔离级别设置: - **Read Uncommitted**: 最低级别的隔离度,允许读取未提交的数据变更。 - **Read Committed**: 只能读取已经提交的数据修改,防止脏读现象的发生。 - **Repeatable Read**: 默认情况下使用的较高层次别的隔离级数,默认情况下能够阻止脏读和不可重复读的情况出现。 - **Serializable**: 这是最严格的隔离等级,它可以避免任何形式上的幻影读问题,但是也降低了系统的性能效率。 不同隔离级别对应着不同程度上解决了诸如脏读、不可重复读以及幻读等问题[^5]。 #### 持久性 (Durability) 持久性表示一旦事务被确认为成功,则该事务对数据库所做的所有更新都将永久保存下来,即便是在系统崩溃或其他异常情况之后也能恢复过来。这通常依赖于日志记录机制以及其他冗余措施来保障数据的安全性和稳定性。 综上所述,MySQLACID 属性共同作用以提供可靠且高效的交易管理功能,从而使得应用程序能够在复杂多变的应用场景下稳定运作[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值