欢迎访问我的技术博客

数据库中事务的隔离级别

数据库中事务的隔离级别

sql标准中定义的4种事务隔离级别:

read uncommitted(未提交读)

对于事务中的修改,即使未提交,其他事务也可见。事务可以读取未提交的内容,这也被称为脏读(dirty read)。 这种级别会导致很多问题,一般很少用。

 

read committed(提交读)

一个事务从开始到提交,所做的修改,其他事务是看不到的。解决了脏读的问题。一个事务只能读到已经提交的事务做的修改。这个级别也叫做不可重复读(norepeatable read),因为两次执行同样的查询,(如果期间有事务执行),可能会得到不同的结果。

大多数数据库系统默认级别都是提交读,但mysql不是。

 

repeatable read(可重复读)

这个级别保证了在同一个事务中多次读取同样的记录的结果是一致的。但是理论上,无法解决幻读(phantom read)的问题。幻读指的是当某个事务读取某个范围内的记录时,另外一个事务在该范围内插入了新的记录,当之前的事务再次读取该范围的记录是,会产生幻行(phantom row)。

innodb存储引擎通过多版本并发控制(mvvc)解决了幻行的问题。

可重复读是mysql的默认事务隔离级别。

 

serializable(可串行化)

它强制事务串行执行,避免了前面说的幻读问题,是最高的隔离级别。

简单说,就是在每一行数据上都加锁。这可能导致大量的超时和锁争用问题,实际中应用较少。只有在非常需要确保数据一致性并且可以接受没有并发的情况下,才适合考虑用这个级别。

总结:

 

 

 

 

gaomingyang

评论已关闭。