基本介绍
当我们的mysql表,被多个线程或者客户端同时操作时,mysql提供一种机制,可以让不同的事务在操作数据时,具有隔离性。从而保证,数据的一致性。
不考虑事务隔离,可能会引发如下问题:
1)脏读
一个客户端(开启事务)会读取到,另外一个客户端(开启事务)没有提交(commit)的修改数据。
2)不可重复读(偏重修改操作
)
在第一个事务还没有结束时,另外一个事务也访问该同一数据。
在第一个事务中的两次读数据之间,由于第二个事务的修改(且commit),那么第一个事务两次读到的的数据可能是不一样的。
在一个事务内两次读到的数据是不一样的,称为是不可重复读
。
3)幻读 | 虚读(偏重增加和删除操作
)
第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。
同时,第二个事务也修改(且commit)这个表中的数据,这种修改是向表中插入一行新数据。
那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
事务隔离级别
基本语法:
设置
set session transaction isolation level 级别名
查看
select @@tx_isolation
补充说明
MySQL**默认的隔离级别是可重复读**。一般在开发中,不要去改。