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