事务的隔离级别
一、事务特性ACID
1、原子性:A atomicity
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
2、一致性:C consistency
事务在执行前后,数据完整性必须保持一致
3、隔离性:I isolation
多个事务,相互独立,互不干扰
4、持久性:D durability
事务一旦提交,同步到磁盘,即使数据库出现了也不会产生影响
二、事务的并发问题
多个事务之间隔离,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
1、脏读
事务A读取到事务B更新的数据,然后事务B回滚,事务A读取的这部分就是脏数据。
事务A读取了事务B为提交的数据,就成为脏读
2、不可重复度
事务A中多次读取到同一个数据,在此期间事务B对数据做了修改并提交,事务A多次读取同一个数据,出现了不一致。
事务A读取到事务B更新后并提交的数据,就成为不可重复读
3、幻读
事务A和事务B同时添加一条记录,发现id为10可以用,此时事务A插入id10并保存提交,事务B插入式报错了,难道我刚才的查询产生了幻觉了吗?
3.6.1 MySQL数据库隔离级别
级别 | 名字 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 数据库默认隔离级别 |
---|---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | 是 | 是 | 是 | |
2 | 读已提交 | read committed | 否 | 是 | 是 | Oracle和SQL Server |
3 | 可重复读 | repeatable read | 否 | 否 | 是 | MySQL |
4 | 串行化 | serializable | 否 | 否 | 否 |