Mysql中的事务是什么?事务都有哪些隔离级别?
事务
1.概念
事务是一组操作的集合,它是一个不可分割的整体,在mysql中:事务就是完成特定功能的sql语句集合。
2.特性
1)原子性(atomicity):事务是不可分割的整体,事务中包括的操作要么都做(commit),要么都不做(rollback)。
2)一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。事务开始前和结束后,数据库的完整性没有被破坏。
3)隔离性(isolation):多事务状态下,一个事务内部的操作和使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
4)持久性(durability):指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
事务隔离级别
1.场景
多条数据并发操作同一条数据
2.处理的问题
1)脏写:一个事务修改了另一个事务未提交的更新数据。
2)脏读:一个事务读取到另一个事务未提交的更新数据。
3)不可重复读:事务A读取一行数据后,事务B修改该数据并提交,事务A再次读取该数据,两次读到的数据不同。
4)幻读:事务A读取一组数据后,事务B添加新数据并提交,事务A再次读取该数据,两次读到的数据行不同。
3.隔离级别:
1)读未提交(Read Uncommited)
事务读取时不加读锁,事务写入时加写锁,解决脏写
2)读已提交(Read Commited)
事务读取时加读锁,事务写入时加写锁,解决脏写、脏读
3)可重复度(Repeatable Read) - MySQL的默认隔离级别
事务读取时不加读锁(innodb还会加间隙锁),事务写入时加写锁,解决脏写、脏读、不可重复读MySQL通过给查询提供虚拟表,解决了不可重复读和幻读 4)可串行化(Serializable)
所有事务串行化顺序执行
4.隔离级别和所处理的问题对照表
隔离级别\问题 | 脏写 | 脏读 | 不可重复读 | 幻读 |
读未提交 | 解决 | 存在 | 存在 | 存在 |
读已提交 | 解决 | 解决 | 存在 | 存在 |
可重复读 | 解决 | 解决 | 解决 | 存在 |
可串行化 | 解决 | 解决 | 解决 | 解决 |
















