From 33024af5b68b80b52cfff7dffb93be0fcc173f19 Mon Sep 17 00:00:00 2001 From: q147258134 <25542139+q147258134@users.noreply.github.com> Date: Sat, 1 Dec 2018 21:14:50 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E6=95=B0=E6=8D=AE=E5=BA=93=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=8E=9F=E7=90=86.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充数据库隔离级别内容 --- notes/数据库系统原理.md | 7 +++++++ 1 file changed, 7 insertions(+) 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)