事务与隔离级别

这个实验还是比较简单的,主要是要耐心加细心,因为很多步骤是讲究先后顺序的,而且涉及的用户有两个,所以一定要细心做(反正我做了十几遍,反反复复重启mysql)

一、前期准备

#建立数据库
create database exp09;
#进入数据库
use exp09;
#建立数据表
create table account(
    id int(11) unique,
    name varchar(25),
    money float
    );
#添加数据
insert into account(id,name,money) values(1,'a',1000);
insert into account(id,name,money) values(2,'b',1000);
insert into account(id,name,money) values(3,'c',1000);
#登录A,B用户
A:mysql -u root -p
B:mysql -u root -p
#分别查看当前客户端的隔离级别
A:select @@tx_isolation;
B:

二、正式实验

(1)隔离级别 READ UNCOMMITTED

#设置B用户的隔离级别为READ UNCOMMITTED
B:set session transaction isolation level READ UNCOMMITTED;
#进入数据库
use exp09;

#测试
#查看account的信息
A:select * from account;
B:

#开启事务
A:start transaction;
B:

#更新数据,将a的money转给b 100
A:update account set money=money-100 where name='a';
A:update account set money=money+100 where name='b';

#查看account的信息
A:select * from account;
B:

#添加记录(4,’d’,1000)
A:insert into account(id,name,money) values(4,'d',1000);

#查看account的信息
A:select * from account;
B:

#删除记录(3,’c’,1000)
A:delete from account where id=3;

#查看account的信息
A:select * from account;
B:

#回滚
A:rollback;

#查看account的信息
A:select * from account;
B:

#提交事务
B:COMMIT;

(2)隔离级别 READ COMMITTED
#设置B的隔离级别为READ COMMITTED
B:set session transaction isolation level READ COMMITTED;

#查看account的信息
A:select * from account;
B:

#开启事务
A:start transaction;
B:

#更新数据,将a的money转给b 100
A:update account set money=money-100 where name='a';
A:update account set money=money+100 where name='b';

#查看account的信息
A:select * from account;
B:

#添加记录(4,’d’,1000)
A:insert into account(id,name,money) values(4,'d',1000);

#查看account的信息
A:select * from account;
B:

#删除记录(3,’c’,1000)
A:delete from account where id=3;

#查看account的信息
A:select * from account;
B:

#回滚
A:rollback;

#查看account的信息
A:select * from account;
B:

#更新数据,将a的money转给b 100
A:update account set money=money-100 where name='a';
A:update account set money=money+100 where name='b';

#查看account的信息
A:select * from account;
B:

#添加记录(4,’d’,1000)
A:insert into account(id,name,money) values(4,'d',1000);

#查看account的信息
A:select * from account;
B:

#删除记录(4,’c’,1000)
A:delete from account where id=4;

#查看account的信息
A:select * from account;
B:

#回滚
A:rollback;

#查看account的信息
A:select * from account;
B:

#提交事务
B:COMMIT;


(3)隔离级别 REPEATABLE READ
#设置B的隔离级别为REPEATABLE READ
set session transaction isolation level REPEATABLE READ;

#开启事务
B:start transaction;

#查看account的信息
A:select * from account;
B:

#更新数据,将a的money转给b 100
A:update account set money=money-100 where name='a';
A:update account set money=money+100 where name='b';

#查看account的信息
A:select * from account;
B:

#添加记录(4,’d’,1000)
A:insert into account(id,name,money) values(4,'d',1000);

#查看account的信息
A:select * from account;
B:

#删除记录(4,’c’,1000)
A:delete from account where id=4;

#查看account的信息
A:select * from account;
B:

#提交事务
B:COMMIT;

(4)隔离级别 SERIALIZABLE

#设置B的隔离级别为SERIALIZABLE
B:set session transaction isolation level SERIALIZABLE;

#查看account的信息
A:select * from account;
B:

#开启事务
A:start transaction;
B:

#查看account的信息
B:select * from account;

#更新数据,将a的money减少100,观察更新是否成功
A:update account set money=money-100 where name='a';

#提交事务
B:COMMIT;

A:COMMIT;

#开启事务
A:start transaction;
B:

#查看account表中id<2的数据信息
B:select * from account where id<2;

#更新数据,将id=3的money增加222,观察更新是否成功
A:update account set money=money+222 where id=3;

#更新数据,将id=1的money增加333,观察更新是否成功
A:update account set money=money+333 where id=1;

#提交事务
B:COMMIT;

A:COMMIT;

#开启事务
A:start transaction;
B:

#查看account表中name=’b’的数据信息
B:select * from account where name='b';

#更新数据,将name=’c’的money增加222,观察更新是否成功
A:update account set money=money+222 where name='c';

#提交事务
B:COMMIT;

A:COMMIT;


#开启事务
A:start transaction;
B:

#查看account表中name=’b’的数据信息
B:select * from account where name='b';

#更新数据,将name=’a’的money增加222,观察更新是否成功
A:update account set money=money+222 where name='a';

#提交事务
B:COMMIT;

A:COMMIT;


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值