事务的特性:
事务有四大特性:
* 原子性:强调事务的不可分割.
* 一致性:事务的执行的前后,数据的完整性保持一致.
* 隔离性:一个事务在执行的过程中,不应该受到其他事务的干扰.
* 持久性:事务一旦结束,数据就持久到数据库中.
如果不考虑事务的隔离性,引发一些安全性问题:
两类问题:
* 读问题:三类
* 脏读 :一个事务读到了另一个事务未提交的数据.
* 不可重复读 :一个事务读到了另一个事务已经提交(update)的数据.引发一个事务中的多次查询结果不一致.
* 虚读/幻读 :一个事务读到了另一个事务已经提交的(insert)数据.导致多次查询的结果不一致
* 写问题:两类
* 丢失更新问题:
解决读问题:
设置事务的隔离级别:
* read uncommitted :脏读,不可重复读,虚读都可能发生.
* read committed :避免脏读,但是不可重复读和虚读有可能发生.
* repeatable read :避免脏读和不可重复读,但是虚读有可能发生的.
* serializable :避免脏读,不可重复读和虚读.(串行化的-不可能出现事务并发访问)
安全性:serializable > repeatable read > read committed > read uncommitted
效率 :serializable< repeatable read < read committed < read uncommitted
MYSQL :repeatable read
Oracle :read committed