出现数据库隔离,是因为会遇到下面三种情况:
1. 脏读: 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据。
2. 不可重复读: 解决了脏读后,会遇到,同一个事务执行过程中,另外一个事务提交了新数据,因此本事务先后两次读到的数据结果会不一致。
3. 幻读: 解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇
的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。
四个隔离级别:
在Mysql InnoDB 中,事务主要有四种隔离级别
- Read uncommitted (未提交读)
- Read committed (已提交读)
- Repeatable read (可重复读)
- Serializable (可串行化)
mysql数据库的默认隔离级别:可重复度 REPEATABLE-READ。 oracle数据库默认隔离级别是:读已提交 read-committed。