分组信息:
终端1:学生姓名 学生1 ip:192.168.1.82
终端2:学生姓名 学生2 ip:192.168.1.74
一、提出任务
1.任务目标
(1)理解事务的概念。
(2)熟悉mysql不同隔离级别的特点、隔离级别的设置。
(3)掌握角色的创建、删除方法。
2.解决的问题
熟练掌握mysql的隔离级别设置。
二、分组要求
两个同学一组,电脑设置在同一局域网,一个同学的电脑是“终端1”,另一个同学的电脑是“终端2”。“终端1”创建1个用户并分配权限给“终端2”使用。
以下操作可以参考:
【终端1】
1.在本地主机创建数据库“exam”,再其中创建数据表“tb”,并写入数据。
2.在本地主机创建账号。
2.给账号分配向tb表读、改、写数据的权限。
“终端1”远程访问信息:
主机名:192.168.1.100(根据自己实际地址修改)
账号:zhongduan2
密码:222222
三、实验内容
(二).隔离级别操作实验。
1.在 MySQL 中,可以通过show variables like '%tx_isolation%'或select @@tx_isolation;语句来查看当前事务隔离级别。
提示:在MySQL 8.0.3 中,tx_isolation 变量被 transaction_isolation 变量替换了。在 MySQL 8.0.3 版本中查询事务隔离级别,只要把上述查询语句中的 tx_isolation 变量替换成 transaction_isolation 变量即可。
2. 另开启一个终端,现在有终端1和终端2;在终端1终端2分别执行下列语句:
隔离级别为read-uncommitted,未提交时就可以读取到数据。
mysql> set transaction_isolation='read-uncommitted';
mysql> select @@transaction_isolation;
mysql> select * from tb;
终端1:
?截图?
终端2:
?截图?
在两个终端同时开启事务。
mysql> start transaction;
开启事务之后的操作有所不同了。下面分别指明终端1终端2的操作。
【终端1】
update tb set age=19 where id=1;
mysql> select * from tb;
?截图?
【终端2】
mysql> select * from tb;
?截图?
问题思考:在同一个事务中,看到的是修改后的数据吗?不是
终端1和终端2都提交以结束事务。
3. 一样,在终端1和终端2上修改隔离级别为read-committed(只有提交后才可以读取)
mysql> set transaction_isolation='Read-committed';
mysql> select @@transaction_isolation;
终端1和2都开启事务;
mysql> start transaction;
终端1:
?截图?
终端2:
?截图?
终端1执行插入操作
mysql> insert into tb values(3,18);
?截图?
终端2查询数据
mysql> select * from tb;
?截图?
问题思考:终端2能否看到终端1新添加的数据?不能
终端1提交
mysql> commit;
终端2查看数据
mysql> select * from tb;
?截图?
问题思考:终端2能否看到终端1新添加的数据?能
4. 在终端1和2修改隔离级别并开启事务。
mysql> set transaction_isolation=' Repeatable-read';
mysql> select @@transaction_isolation;
终端1和2都开启事务;
mysql> start transaction;
终端1:
?截图?
终端2:
?截图?
终端1插入数据
mysql> insert into tb values(4,21);
?截图?
终端2查询数据
mysql> select * from tb;
?截图?
问题思考:终端2能否看到终端1新添加的数据?不能
终端1提交
mysql> commit;
终端2查看数据
mysql> select * from tb;
?截图?
问题思考:终端2能否看到终端1新添加的数据?不能
终端2提交
mysql> commit;
终端2查看数据
mysql> select * from tb;
?截图?
问题思考:终端2能否看到终端1新添加的数据?能
5. 在终端1和2修改隔离级别并开启事务。
mysql> set transaction_isolation=' serializable';
mysql> select @@transaction_isolation;
终端1和2都开启事务;
mysql> start transaction;
终端1:
?截图?
终端2:
?截图?
终端1执行更新操作
mysql> update tb set age=4 where id=1;
?截图?
终端2执行查询操作
mysql> select * from tb;
?截图?
问题思考:终端2能否看到终端1修改的数据?不能,光标一直在闪
当终端1提交commit结束事务后终端2才能看到修改后的数据。