mysql 8的四种隔离级别
1. read-uncommited
T表中有int kucun字段值为100;
在SessionA中开启事务TransA;
TransA对kucun更改为101;
并select查询,结果为101(现在因为尚未commit,T表中kucun值依旧为100);
此时,SessionB中开启事务TransB;
在TransB中select 查询kucun,值为101.因为可以读取尚未commit的事务中的值,也就是TransA中的kucun;
此时SessionA中TransA commit,则T表中kucun值被持久化为101。
2. read-commited
T表中有int kucun字段值为100;
在SessionA中开启事务TransA;
TransA对kucun更改为101;
并select查询kucun,结果为101(现在因为尚未commit,T表中kucun值依旧为100);
此时,SessionB中开启事务TransB;
在TransB中select 查询kucun,值依旧为100.因为只能读取commit后的事务中的值,也就是说TransA中的kucun值未commit的话,是不能被TransB所看见的,这也对应了read committed 的标题,只能读取commit后的数据值;
此时SessionA中TransA commit,则T表中kucun值被持久化为101。
3. REPEATABLE-READ
T表中有int kucun字段值为100;
在SessionA中开启事务TransA;
select查询kucun,结果为100(此时T表kucun为100);
此时,SessionB中开启事务TransB;
在TransB中select 查询kucun,值为100;
在TransB对kucun更改为200(此时T表kucun为100);
TransB commit(此时T表kucun为200);
TransA中再次select 查询kucun,得到的值为100(此时T表kucun为200);
这个就是可以重复地读取自己事务中的值,不受实际 表 影响,TransA沉浸在自己的世界里,所以也叫幻读。