读未提交( Read uncommitted)
一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证,会造成脏读。 读已提交( Read committed)
一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生,会造成不可重复读。 可重复读( Repeatable read)
就是在开始读取数据(事务开启)时,不再允许修改 *** 作,可避免脏读、不可重复读的发生,但是会造成幻读。 串行( Serializable)
是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。 Mysq的默认隔离级别是 Repeatable read。
当前有一个表:
查看隔离级别
show variables like '%isolation%';模拟事务隔离级别
开启两个窗口
AB均关闭mysql的事务自动提交
set autocommit = 0; -- 默认为1
设置隔离级别
-- 设置隔离级别读未提交( Read uncommitted)- 脏读 -
-- 设置read uncommitted set session transaction isolation level read uncommitted; -- 这种隔离级别会引起脏读,A事务读取到B事务没有提交的数据
AB设置相同的隔离级别
读已提交( Read committed) - 不可重复读 --- 设置read committed set session transaction isolation level read committed; -- 这种隔离级别会引起不可重复读,A事务在没有提交事务之前,可看到数据不一致
AB设置相同的隔离级别
可重复读( Repeatable read) - 幻读 --- 设置repeatable read (MySQL默认的) set session transaction isolation level repeatable read; -- 这种隔离级别会引起幻读,A事务在提交之前和提交之后看到的数据不一致
AB设置相同的隔离级别
串行( Serializable) - 效率低下 --- 设置serializable set session transaction isolation level serializable; -- 这种隔离级别比较安全,但是效率低,A事务 *** 作表时,表会被锁起,B事务不能 *** 作。
AB设置相同的隔离级别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)