**
mysql事物隔离级别
**
READ UNCOMMITTED:读未提交 (可以读取未提交的数据)
最低的隔离级别,允许读取未提交的数据,可能回到导致脏读,幻读,不可重复读
READ COMMITTED:读已提交 (可以读取已经提交的数据)
允许读取已经提交的数据,可以阻止脏读,但是幻读和不可重复读仍有可能发生
REPEATABLE READ:可重复读(mysql默认事物隔离级别)
对同一字段的多次读取结果都是一致的,除非数据是被本身修改(其他人修改的读不到),可以阻止脏读,不可重复读,但是幻读还有可能发生,
SERIALIZABLE:串行化
最高的事物隔离级别,所有的事物逐个执行,事物之间不可能产生干扰,可以防止脏读、幻读、不可重复读。
**
脏读、不可重复读、幻读
**
脏读:表示当前事物可以读到其他事物修改了,但是还没提交的数据
不可重复读:当前事物查询了两次,但是两次数据不同,是因为其他事物修改了这个数据,并且提交了,正常来说是不应该读到其他事物修改的数据,因为本次事物还没有提交。
幻读:当前事物在未提交时读到了其他事物添加的数据 (这也属于不可重复读)。但是在
REPEATABLE READ(可重复读) 的隔离级别下,还是可以读取到但是不显示出来。例如在A事物第一次查询是三条记录,这时B事物添加了一条数据 (id = 10) 并提交,A事物第二次查询还是三条记录,但在此时A事物若想添加一条数据和B事物添加的数据一样时 (id = 10) 是插入不进去的,所以REPEATABLE READ(可重复读) 的隔离级别下还是存在幻读