数据库事务隔离级别和解决的问题

作者: zhaochenxi 分类: 数据库 发布时间: 2015-11-07 20:53

一、关系型数据库的并发操作会出现4个问题:

1.脏读:A事务读取了B事务还没有提交的数据,并且A在这个数据上做了修改。

2.不可重复读:A事务读取了B事务已经提交的更改数据(A读了,B更改,A继续读)

3.幻读:A事务读取了B事务已经提交的新增加数据

4.更新丢失:

第一类:A事务在撤销的时候将B事务已经提交的更新数据使用A事务中的数据覆盖了。

第二类:A事务直接覆盖了B事务对数据的操作。

 

二、如何解决上面的问题呢?数据库事务有4个隔离级别。使用这4个隔离级别,数据库会分析事务中的SQL语句来自动为执行的操作加上合适的所机制来控制并发问题,这样就不需要手动在SQL语句中写加锁操作了。

READ UNCOMMITED:允许脏读,不可重复读,幻读,第二类更新丢失

READ COMMITED:允许不可重复读,幻读,第二类更新丢失

REPEATABLE READ:允许幻读,

SERIALIZABLE:不允许以上的任何问题发生

应该使用哪一种事务隔离级别应该根据情况而定,值得一提的是oracle数据库中是不会发生脏读这种可恶的问题的。MySQL InnoDB默认的隔离级别是REPEATABLE READ

三、在JDBC中如何指定隔离级别

通过事务的setTransactionIsolation()方法设置。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注