#创建银行帐号表
create table bank
(
bid int primary key auto_increment,
account varchar(20),
money int
);
select * from bank;
insert into bank
(account,money)
values
('张三',10000),
('李四',10000);
select * from bank;
#手动开启事务
start transaction;
update bank
set money=money-1000
where account='张三';
select * from bank;
#突然出错
#回滚事务
#rollback; #只能执行一次,回滚之后手动事务就结束了。
select * from bank;
update bank
set money=money+1000
where account='李四';
#手动提交事务
commit;
select * from bank;
代码仅供参考
#事务a
#设置事务为未提交读
set session transaction isolation level read uncommitted;
#开始手动事务
start transaction;
#更新数据
update classInfo
set className='111'
where classId=1;
#回滚事务
rollback;
select * from classInfo
#事务b:在另外一个脚本中运行
set session transaction isolation level read uncommitted;
select * from classInfo where classId=1
#事务a
#设置事务隔离级别为提交读
set session transaction isolation level read committed;
#开启手动事务
start transaction;
#在事务中第一次查询数据
select * from classInfo where classId = 1;
#在事务中第二次查询数据
select * from classInfo where classId =1;
#提交事务
commit;
#事务b(在另外一个脚本中执行)
set session transaction isolation level read committed;
start transaction;
update classInfo
set className='111'
where classId = 1
commit;
#事务a
#设置事务隔离级别为可重复读
set session transaction isolation level repeatable read;
#开启手动事务
start transaction;
#查询编号为10的班级
select * from classInfo where classId=10;
#插入班级编号为10的班级
insert into classInfo
(classid,className)
values
(10,'AAA10');
#提交事务
commit;
select * from classInfo
#事务b(在另外一个脚本中上运行)
set transaction isolation level repeatable read;
#开启手动事务
start transaction;
#插入编号为10的班级
insert into classInfo
(classId,className)
values
(10,'AAA10');
#提交事务
commit;
#事务a
#设置事务隔离级别为可重复读
set session transaction isolation level serializable;
#开启手动事务
start transaction;
#查询编号为10的班级
select * from classInfo where classId=10;
#插入班级编号为10的班级
insert into classInfo
(classid,className)
values
(10,'AAA10');
#提交事务
commit;
#事务b(在另外一个脚本中上运行)
set transaction isolation level serializable;
#开启手动事务
start transaction;
#插入编号为10的班级
insert into classInfo
(classId,className)
values
(10,'AAA10');
#提交事务
commit;
#解决脏读问题,提升数据库库隔离级别
#事务a
#设置事务为提交读
set session transaction isolation level read committed;
#开始手动事务
start transaction;
#更新数据
update classInfo
set className='111'
where classId=1;
#回滚事务
rollback;
select * from classInfo
#将事务隔离级别提升为提交读
#事务b:在另外一个脚本中运行
set session transaction isolation level read committed;
select * from classInfo where classId=1
#事务a
#设置事务隔离级别为提交读
set session transaction isolation level repeatable read;
#开启手动事务
start transaction;
#在事务中第一次查询数据
select * from classInfo where classId = 1;
#在事务中第二次查询数据
select * from classInfo where classId =1;
#提交事务
commit;
select * from classInfo;
#事务b(在另外一个脚本中执行)
set session transaction isolation level repeatable read;
start transaction;
update classInfo
set className='111'
where classId = 1
commit;