-- 查看是否是自动提交 1表示开启,0表示关闭 select @@autocommit ; -- 设置关闭 set autocommit = 0 ;
2.数据准备
-- 创建数据库 create database tran ; -- 切换数据库 两个窗口都执行 use tran ; -- 准备数据 create table psn(id int primary key ,name varchar ( 10 )) engine = innodb; -- 插入数据 insert into psn values ( 1 , ‘ zhangsan ‘ ); insert into psn values ( 2 , ‘ lisi ‘ ); insert into psn values ( 3 , ‘ wangwu ‘ ); commit ;
这个我们开两个会话窗口进行测试。分别为a、b两个窗口。
3.测试1: read uncommitted(读未提交)
-- a: set session transaction isolation level read uncommitted ; -- b: set session transaction isolation level read uncommitted ;
-- a: -- 开始事务 start transaction ; select * from psn; update psn set name = ‘ zhaoliu ‘ ; selecet * from psn -- b: start transaction ; select * from psn;
b读取的结果zhaoliu。产生脏读,因为a事务没有commit,读取到了不存在的数据
-- a: -- 提交事务 commit ; -- b: select * from psn;
b读取的数据是zhaoliu,因为a事务已经commit,数据永久的被修改。
4.测试2:read committed
-- a: set session transaction isolation level read committed ; start transaction ; select * from psn; -- b: set session transaction isolation level read committed ; start transaction ; select * from psn;
执行到这里两个窗口的数据是一致的。
-- a: update psn set name = ‘ tianqi ‘ where id = 1 ; select * from psn; -- b: select * from psn;
执行到此处两个窗口的数据不一致,b窗口中读取不到更新的数据
-- a: commit ; select * from psn; -- b: select * from psn;
5.测试3:repeatable read
-- a: set session transaction isolation level repeatable read ; start transaction ; select * from psn; -- b: set session transaction isolation level repeatable read ; start transaction ; select * from psn; -- 此时两个窗口的数据是一致的 ? -- a: insert into psn values ( 4 , ‘ zhouba ‘ ); commit ; select * from psn; ? -- b: select * from psn; -- 读取不到添加的数据 insert into psn values ( 4 , ‘ zhouba ‘ ); -- 报错,无法插入数据 -- 此时发现读取不到数据,但是在插入的时候不允许插入,出现了幻读,设置更高级别的隔离级别即可解决
6.测试事务
-- 事务包含四个隔离级别:从上往下,隔离级别越来越高,意味着数据越来越安全 read uncommitted ; -- 读未提交 read commited; -- 读已提交 repeatable read ; -- 可重复读 serializable -- 序列化执行,串行执行 /* 产生数据不一致的情况: 脏读 不可重复读 幻读 */
四种隔离级别会造成的异常情况:
隔离级别 异常情况 异常情况 异常情况 读未提交 脏读 不可重复读 幻读 读已提交 不可重复读 幻读 可重复读 幻读 序列化MySQL事务测试
标签:查看 varchar level src 不可重复读 ade inf zha table
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did117797