数据库事务的四级隔离级别

数据库事务的四级隔离级别

提出数据库的食物隔离级别是为了保证数据库读取中的正确性。

 

首先说明一下数据库操作中由于事务引起的不可预料事件。

1.A事务和B事务同时更新表中的某一行数据,但是事务B由于出现故障推出,导致A和B对数据的修改都失效。

2.A事务修改了数据但是没有提交,此时B事务来读取相对应的数据时会读取到A修改之前的数据。

3.A事务读取某行数据后,B事务修改了A读取的那行数据,A再次读取那行时得到值和之前不一样。

4.A事务进行了两次数据查询操作,第二次查询得到了第一次查询中没有出现或者丢失了的数据。

 

其中第1类问题称为更新丢失问题,第2类问题成为脏读问题,第3和4类问题统称为不可重复读问题,第4类问题又成为幻读。

 

针对上诉四种问题,SQL规范中提出了四种事务隔离级别来处理上诉问题。

1.未授权读(Read uncommitted):允许脏读,但不允许更新丢失。如果A事务开始写数据,那么B事务不允许同时进行写操作,但是允许B事务的读操作。此种事务隔离级别可以通过“排他锁”来实现。

2.授权读(Read committed):允许不可重复读,但是不允许脏读。可以通过“瞬间共享读锁”和“排他锁”来实现。读取数据的事务允许其他事务继续读取该行数据,但是未提交的写事务拒绝其他事务访问该行事务。

3.可重复读(Repeatable read ):禁止不可重复读和脏读,但有时会出现幻读。可以通过“共享读锁”和“排他写锁”来实现。读取数据的事务会禁止其他写事务,但是允许读事务;写数据的事务禁止一切其他事务。

4.序列化(Serializable):最高的事务隔离级别,它要求事务必须序列化的串行执行,不允许事务并行执行。

 

事务的隔离的级别越高越能保证数据的一致性和完整性,但是引起的问题是应用的并发性降低,响应速度降低。

 

posted @ 2014-04-16 22:56  blackcat_333  阅读(370)  评论(0编辑  收藏  举报