SQL标准的事务隔离级别
级别 | 解释 |
---|---|
读未提交(Read Uncommitted) | 如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。 |
读已经提交的(Read Committed) | 读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。 |
可重复读(Repeatable Read) | 读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务 |
可串行化(Serializable) | 提供严格的事务隔离。它要求事务串行的执行,事务只能一个接着一个地执行,不能并发执行。 |
Mysql和其他数据的默认事务隔离级别的区别
在Mysql中默认提供的是事务隔离级别是可重复读,而其他大多数的数据库系统提供的是读已提交。可重复读和读已提交的区别举个例子:
read repeatable:开启一个事务,在该事务的时刻A时读一个数据,而后在时刻B时再次读,这2次读的数据是一致的,因为在此期间如果有其他的事务中含有对该行数据的写请求时,由于读取数据的事务将会禁止写事务(但允许读事务)
,所以保证了对该数据的可重复性的读取。
read committed:开启一个事务,在该事务的时刻A时读一个数据,而后在时刻B时再次读,这2次读的数据是不一致的,因为在这2次读之间可能有其他事务更改这个数据,并且将他们本身提交了(读取数据的事务允许其他事务继续访问该行数据
),那么根据读已提交的定义,此行数据在B时刻的读取是有效的,但是由于被其他的事务所修改了,所以在该事务中,时刻A和时刻B的读取结果是不一样的。
当然这些事务隔离级别都是设置的,只是不同的数据库系统其默认选择的事务隔离级别不一样。需要注意一下。