事务隔离级别被定义在了一个事务之中,哪些数据对于当前事务是“可见的”。并发访问数据库时,事务隔离级别定义了多个事务之间对于同一个目标数据源访问时的可交叉程度
当一个事务可以看到另一个事务未提交的数据,称为脏读,如果该事务回滚,那么另一个事务拿到的数据就是错的

事务A读取了一行数据,事务B改了这行数据并提交,事务A再次读了这条数据,数据改变了

事务A读出一个结果集,事务B在这个集中插入了数据,事务A再次读的时候会多一条数据

JDBC规范增加了隔离级别。MySQL可以通过select @@global.tx_isolation;查询当前事务隔离级别
TRANSACTION_NONE
这意味着当前的 JDBC 驱动不支持事务,也意味着这个驱动不符合 JDBC 规范
READ_UNCOMMITTED(读未提交)
允许事务看到其它事务修改了但未提交的数据,这意味着有可能是脏读、不可重复读或者幻读
READ_COMMITTED(读提交)
一个事务在未提交之前,所做的修改不会被其它事务所看见。这能避免脏读,但避免不了不可重复读和幻读
REPEATABLE_READ(可重复读取) (MySQL默认的事务隔离级别)
避免了脏读和不可重复读,但幻读依然是有可能发生的
SERIALIZABLE(序列化)(就是顺序执行,高并发场景不适用)
避免了脏读、不可重复读以及幻读
原文:https://www.cnblogs.com/mouseGo/p/14000576.html