并发事务问题
脏读:一个事务读到另一个事务还没提交的数据。
-- 例如B事务读取到了A事务还没提交的数据。
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是插入数据时,又发现这行数据已经存在,好像出现了一个幻影一样。
-- 大致流程A查询,B插入,A插入,报错,回滚,A查询.......
-- 通常在解决了不可重复读后出现
事务隔离级别
脏读会不会出现 不可重复读会不会出现 幻读会不会出现
-- read uncommitted(读,未提交。性能最高,数据安全性最差) 会 会 会
-- read committed(读,已提交) 不会 会 会
-- repeatable read(mysql默认隔离级别,可重复读) 不会 不会 会
-- serializable(串行化。性能最差,数据安全性最高) 不会 不会 不会
查看事务隔离级别
-- select @@transaction_isolation;
select @@transaction_isolation;
设置事务隔离级别
-- set [session / global] transaction isolatian level {read uncommitted / read committed / repeatable read / serializable};
-- [session / global] 仅针对当前(会话)客户端有效/ 针对所有客户端有效
set session transaction isolation level repeatable read ;