事务的概念
逻辑上的一组操作,组成着个逻辑操作的逻辑单元,要么一起成功,要么一起失败。
事务四大特性
原子性:事务是不可分割的
隔离性:一个事务的执行不受其他事务干扰
一致性:数据完整性应在事务执行前后保持一致
持久性:事务结束后就持久的保存在数据库
不考虑隔离性引发的安全问题
脏读:一个事务读到了另一个事务的未提交数据
不可重复读:一个事务读到另一个事务已提交的更新数据(update)而导致多次的查询结果不一致
虚读(幻读):一个事务读到另一个事务已提交的插入数据(insert)导致多次查询结果不一致
关系和联系:幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。简单的说就是update和inset之间的关系。
四种隔离级别
① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
③ Read committed (读已提交):可避免脏读的发生。
④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。
在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。