SQL标准之事务隔离的四个级别实现方式

212 阅读2分钟

SQL标准的事务隔离级别

级别 解释
读未提交(Read Uncommitted) 如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。
读已经提交的(Read Committed) 读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
可重复读(Repeatable Read) 读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务
可串行化(Serializable) 提供严格的事务隔离。它要求事务串行的执行,事务只能一个接着一个地执行,不能并发执行。

Mysql和其他数据的默认事务隔离级别的区别

在Mysql中默认提供的是事务隔离级别是可重复读,而其他大多数的数据库系统提供的是读已提交。可重复读和读已提交的区别举个例子:

read repeatable:开启一个事务,在该事务的时刻A时读一个数据,而后在时刻B时再次读,这2次读的数据是一致的,因为在此期间如果有其他的事务中含有对该行数据的写请求时,由于读取数据的事务将会禁止写事务(但允许读事务),所以保证了对该数据的可重复性的读取。

read committed:开启一个事务,在该事务的时刻A时读一个数据,而后在时刻B时再次读,这2次读的数据是不一致的,因为在这2次读之间可能有其他事务更改这个数据,并且将他们本身提交了(读取数据的事务允许其他事务继续访问该行数据),那么根据读已提交的定义,此行数据在B时刻的读取是有效的,但是由于被其他的事务所修改了,所以在该事务中,时刻A和时刻B的读取结果是不一样的。

当然这些事务隔离级别都是设置的,只是不同的数据库系统其默认选择的事务隔离级别不一样。需要注意一下。