SQL标准中定义了四种隔离级别,规定了事务之间操作相关影响的情况。
READ UNCOMMITTED 未提交读
事务A所做的修改在最终提交之前就可以在别的事务中可见,因此会产生所谓的“脏读”,几乎完全没有隔离性,因此实际中很少用到。
READ COMMITTED 提交读
事务所做的修改只有在提交之后,才对其它事务可见,这种级别不会读到脏数据。但是别的事务却又可能对该事务造成影响。
假设事务A在最开始和最后都要读取数据X,在两次读取的中间,另外一个事务B对X的值做了修改并最终提交,在该级别下,会导致事务A两次读取到的X值不同。
因此该级别也称为“不可重复读”
REPEATABLE READ 可重复读
该级别解决了重复读的问题,
SERIALIZABLE 串行化
强制事务串行执行,因此保证了完全的隔离性。
mysql默认的隔离性是可重复读,可以通过如下方式查看
select @@tx_isolation;
select @@global.tx_isolation;
改变mysql的事务隔离级别,可以采用
SET GLOBAL tx_isolation='READ-UNCOMMITTED';
SET GLOBAL tx_isolation='READ-COMMITTED';
需要注意的是mysql中支持事务的存储引擎有:innodb、NDB cluster