关系型数据库隔离等级简介

63 阅读1分钟

根据 ANSI/ISO SQL 的标准,关系型数据库的隔离等级有以下四种:

读未提交 Read uncommitted

最低级的隔离等级,读写都不加锁 可能发生脏读

事务2 插入一条数据A
事务1 读到数据A
事务2 回滚

以上情况下,事务1将读到一条从没被提交过的数据A

读已提交 Read committed

将会持有写锁到事务结束,select执行完成时就释放读锁 不会发生脏读,可能发生不可重复读

事务1 尝试读数据A,没读到
事务2 插入一条数据A
事务2 提交
事务1 尝试读数据A,成功读到了

以上情况下,事务1两次读取的结果不同

可重复度 Repeatable reads

将会持有写锁和读锁到事务结束,但是不获取range lock 不会发生不可重复读,可能发生幻读

事务1 筛选数据,其中没有数据A
事务2 插入一条数据A
事务2 提交
事务1 筛选数据,其中有数据A

以上情况下,事务1两次筛选数据的结果不同

序列化 Serializable

将会持有写锁、读锁、range lock到事务结束 避免了以上问题