事务隔离级别
事务隔离级别,它决定多个事务并发操作同一个对象时的处理方式。
在事务中第一个数据修改语句
(SELECT,
INSERT,
DELETE,
UPDATE,
FETCH,
COPY)
执行之后,事务隔离级别就不能再次设置。
READ COMMITTED:
读已提交隔离级别,
事务只能读到已提交的数据而不会读到未提
交的数据,这是缺省值。
实际上,SELECT 查询会查看到在查询开始运行的瞬间该数据库的一个快照。不过,
SELECT 能查看到其自身所在事务中先前更新的执行结果。
即使先前更新尚未提交。
请
注意,在同一个事务里两个相邻的SELECT 命令可能会查看到不同的快照,因为其它
事务会在第一个SELECT 执行期间提交。
因为在读已提交模式里,
每个新的命令都是从一个新的快照开始的,
而这个快照包含所
有到该时刻为止已提交的事务,
因此同一事务中后面的命令将看到任何已提交的其它事
务的效果。这里关心的问题是在单个命令里是否看到数据库里绝对一致的视图。
读已提交模式提供的部分事务隔离对于许多应用而言是足够的,并且这个模式速度快,
使用简单。不过,
对于做复杂查询和更新的应用,
可能需要保证数据库有比读已提交模
式更加严格的一致性视图。
REPEATABLE READ:事务可重复读隔离级别,事务只能读到事务开始之前已提交的
数据,不能读到未提交的数据以及事务执行期间其它并发事务提交的修改(但是,
查询
能查看到自身所在事务中先前更新的执行结果,即使先前更新尚未提交)
。这个级别和
读已提交是不一样的,
因为可重复读事务中的查询看到的是事务开始时的快照,
不是该
事务内部当前查询开始时的快照,就是说,单个事务内部的select 命令总是查看到同样
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
6
的数据,
查看不到自身事务开始之后其他并发事务修改后提交的数据。
使用该级别的应
用必须准备好重试事务,因为可能会发生串行化失败。