事务隔离级别是指若干个并发的事务之间的隔离程度。
1.read uncommitted 读未提交,可能出现脏读、不可从复读、幻读
脏读相对于其他事务(B)来说 本事务(A)做了修改,脏读是读到了错误数据
A修改 B读取
A-start A update B-start B read B-end A rollback or update A-end
2.read committed 读已提交,可能出现不可重复读、幻读,大多数数据库默认级别(SQL Server Oracle)
不可重复读相对于本事务(A)来说 其他事务(B)做了修改,不可重复读就是读到了被修改了的数据,即两次读的数据不一样
A修改 B修改
A-start A read B-start B update B-end A-update(此时数据已经不一致了) A-end
3.repeatable read 重复读,可能出现幻读,mysql默认级别
幻读相对于本事务(A)来说 其他事务(B)做了插入,幻读就是读到了新插入的数据,有可能会产生漏改现象
A读取/修改 B插入/删除
A-start A read B-start A-end B-insert B-end A-start A read(此时发现有没见过的,就像出现幻觉了) A-end
1.read uncommitted 读未提交,可能出现脏读、不可从复读、幻读
脏读相对于其他事务(B)来说 本事务(A)做了修改,脏读是读到了错误数据
A修改 B读取
A-start A update B-start B read B-end A rollback or update A-end
2.read committed 读已提交,可能出现不可重复读、幻读,大多数数据库默认级别(SQL Server Oracle)
不可重复读相对于本事务(A)来说 其他事务(B)做了修改,不可重复读就是读到了被修改了的数据,即两次读的数据不一样
A修改 B修改
A-start A read B-start B update B-end A-update(此时数据已经不一致了) A-end
3.repeatable read 重复读,可能出现幻读,mysql默认级别
幻读相对于本事务(A)来说 其他事务(B)做了插入,幻读就是读到了新插入的数据,有可能会产生漏改现象
A读取/修改 B插入/删除
A-start A read B-start A-end B-insert B-end A-start A read(此时发现有没见过的,就像出现幻觉了) A-end
4.serializable 序列化,事务顺序执行,性能低
以上如有偏差,还望指正。