mysql事务

时间:2021-08-28 01:07:04

1. 事务并不专属于mysql

2. 事务的ACID特性

1)原子性(atomicity)  

  一个事务必须被视为一个不可分割的最小工作单元,整个事务中得所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来讲,不可能只执行其中的一部分

操作,这就是事务的原子性。

2)一致性(consistency)

  数据库的总是从一个一致性的状态转换到另一个一致性的状态。

3)隔离性(isolation)

  通常来说,一个事务所做的修改在最终提交之前,对其他事务是不可见的。

4)持久性(durability)

  一旦事务提交,则其所做的修改就会永久保存到数据库中。

3. 隔离级别

  1)READ UNCOMMITTED(未提交读)

    在该级别,事务中得修改,即使没提交,对其他事务也是可见的。

  2)READ COMMITTED(提交读)

    在提交之前对其他事务都是不可见的

  3)REPEATABLE READ(可重复读)[mysql默认的事务隔离级别]

    该级别保证了在同一个事务中多次读取同样的记录的结果是一致的。

    但是会产生幻读得问题

  4)SERIALIZABLE(可串行化)

    该级别会在读取的每一行数据上都加锁

隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
READ UNCOMMITED Yes Yes Yes No
READ COMMITTED No Yes Yes No
REPEATABLE READ No No Yes No
SERIALIZABLE No No No Yes

4.死锁产生的原因

  1)因为真正的数据冲突

  2)存储引擎的实现方式

5.mysql 提供了两种事物型的引擎:Innodb 、NDB Cluster

6.多版本并发控制(MVCC)