时间:2021-07-01 10:21:17 帮助过:3人阅读
1)mysql中只有innodb数据库引擎才支持事务
2)事务保证了数据库的完整性,可以使批量的sql语句要么全部执行,要么全部不执行。
ACID:原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
原子性:
一个事务中的所有操作要么全部完成要么全部不完成,不会结束在中间的某个环节,即:在事务中间执行出现错误所有全部回滚,就类似该操作从未执行过一样。
一致性:
事务操作前后,数据库的完整性没有被破坏,例如:你向我转钱,不能出现你扣了钱,而我还没有收到。
隔离有四种级别:(1)读未提交;(2)读已提交;(3)可重复读;(4)串行化。
隔离性:
同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有干扰。例如:我再从一张银行卡中取钱,而在我取钱结束前,你不能往我卡里转钱
持久性:
事务结束后,对数据库的修改是永久的,即便系统故障了也不会丢失。
1)脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3)幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
隔离级别与之对应的情况(mysql默认的事务隔离级别为repeatable-read)
隔离级别 | 是否发生脏读 | 是否不可重复读 | 是否幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 |
读已提交(read-committed) | 否 | 是 | 是 |
可重复度(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
脏读、幻读、不可重复读事例
需要开启与上表相对应的隔离级别
a.脏读:
执行顺序 | A事务 | B事务 |
---|---|---|
1 | 开启事务 | |
2 | 开启事务 | |
3 | 查询到余额为200 | |
4 | 查询到余额为200 | |
5 | 取款100,余额被更改为100 | |
6 | 查询账户余额为100 | |
7 | 取款发生错误事务回滚,余额变为200 | |
8 | 查询余额为200 | |
9 | 提交事务 | |
说明 | 脏读即根据另一事务对数据的修改而变化 |
b.不可重复读
执行顺序 | A事务 | B事务 |
---|---|---|
1 | 开启事务 | |
2 | 开启事务 | |
3 | 查询到余额为200 | |
4 | 查询到余额为200 | |
5 | 取款100,余额被更改为100 | |
6 | 查询账户余额为200 | |
7 | 提交事务 | |
8 | 查询余额为100 | |
9 | 提交事务 | |
说明 | 不可重复读即可以读到另一事务提交后的数据 |
c.不可重复读
执行顺序 | A事务 | B事务 |
---|---|---|
1 | 开启事务 | |
2 | 开启事务 | |
3 | 查询数据条数为10条 | |
4 | 查询数据条数为10条 | |
5 | 新增十条数据 | |
6 | 提交事务 | |
7 | 查询数据条数为20条 | |
9 | 提交事务 | |
说明 | 幻读,前后多次读取数据总量不一致 |
mysql事务
标签:tab comm hit word mic 开启 normal 说明 更改