事务的隔离级别

发布于 27 天前  31 次阅读


在数据库中,事务默认分为四种隔离级别:未提交读(Read uncommitted)、提交读(Read committed)、可重复读(Repeatable read)、序列化(Serializable)。在并发的情况下,根据不同的设置可能会产生不同的一些并发问题。脏读,虚读,以及幻读。通过设置不同的隔离级别,可以分别解决下面的问题。

脏读:事务T1正在操作一条数据,此时事务T2获取该条数据纪录,如果T1异常,事务回滚,T2读取到的数据就是脏数据。

虚读:事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值。

幻读:事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。

未提交读

顾名思义,也就是在数据库读取的时候,读取到了其他事务未提交的数据。

产生的并发问题:脏读,虚读,以及幻读。

提交读

一个事务读取到其他事务提交后的数据。

产生的并发问题:虚读,幻读。

可重复读

就是一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改。

产生的并发问题:幻读。

序列化

事务串行化执行,隔离级别最高,能有效解决并发产生的问题。

存在问题:效率低下。

通过设置不同的隔离级别可以保证数据的安全。但是隔离级别设置的越高会导致数据库的效率低下。其中:Mysql是Repeatable read,而Oracle和SQL Server是Read committed

 


含词未吐,气若幽兰