事务的ACID特性:
- 原子性(Atomicity):事务要么全部被执行,要么全部不被执行。
- 一致性(Consistency):事物的执行使数据库从一种正确的状态转换到另一种正确的状态。
- 隔离性(Isolation):一个事物的执行不能被其他事务所影响。
- 持久性(Durability):事务一旦提交,就会永久的保存在数据库中。
隔离级别:读未提交(Read Uncommitted)、读提交(Read Committed)、可重复读取(Repeatable Read)、序列化(Serializable)
- 脏读:事务A读到了事务B未提交的数据,但随后事务B回滚。
- 不可重复读:事务A在两次查询所获得的同一条数据不一致。原因是事务B在事务A进行的过程中对数据进行了修改(update)并提交。
- 幻读:事务A在两次查询中所获得的的数据条数不一致。原因是事务B在事务A进行的过程中进行了插入或删除(insert or delete)并提交。
为了解决以上问题,数据库设置了四种隔离级别
- 读未提交:最低的隔离级别,会出现 脏读、不可重复读、幻读
- 读提交:限制不能读到其他事务未提交的数据,会出现不可重复度、幻读。
- 可重复读:在有事务进行读取时,不允许其他事物进行修改(update)操作,会出现幻读。
- 序列化:事务串行执行,不允许并发。
事务的隔离级别越高,安全性越好,但同时也在影响程序的效率。
Oracle默认隔离级别Read Committed
MySQL默认隔离级别Repeatable Read