diff --git a/notes/数据库系统原理.md b/notes/数据库系统原理.md index 6e910f37..348f420f 100644 --- a/notes/数据库系统原理.md +++ b/notes/数据库系统原理.md @@ -280,13 +280,20 @@ SELECT ... FOR UPDATE; 事务中的修改,即使没有提交,对其它事务也是可见的。 +- 写数据时加上X锁,直到事务结束;读的时候不加锁。 +- 虽然能够避免丢失数据,但是会读到没有提交或者回滚的内容 (脏数据)。 + ## 提交读(READ COMMITTED) 一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。 +- 写数据的时候加上X锁,直到事务结束;读的时候加上S锁,读完数据立刻释放。 +- 这能避免“丢失数据”和“脏数据”,但是会出现“不可重复读”的问题,这是第二级的事务隔离级别。 ## 可重复读(REPEATABLE READ) 保证在同一个事务中多次读取同样数据的结果是一样的。 +- 写数据的时候加上X锁,直到事务结束;读数据的时候加S锁,也是直到事务结束。 +- 这能避免“丢失数据”和“脏数据”,“不可重复读”三个问题 , 这是数据库常用的隔离级别。 ## 可串行化(SERIALIZABLE)