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