目录
一、实验目的与要求
二、实验内容
三、实验小结
实验中涉及的数据参考:[数据库实验一]数据库和表-CSDN博客
一、实验目的与要求
1.熟悉提交事务
2.回滚事务
3.检查点技术
注:可以用可视化软件来实现
二、实验内容
基于现有数据库设计事务提交、事务回滚、及检查点实验,观察比较提交前后执行结果并分析。
源码:
(1)将autocommit设置为0
mysql> set autocommit=0;
(2)设计事务提交
mysql> start TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(1,'a');
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
(3)设计事务回滚
mysql> start TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(2,'b');
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
(4)设计检查点实验
mysql> start TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(2,'b');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint L1;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(3,'c');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint L2;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(4,'d');
Query OK, 1 row affected (0.00 sec)
mysql> rollback to L2;
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
运行测试结果截图:
(1)事务commit之前 缓冲区中的test表格和内存中的test表格
事务commit后内存中的test表格
(2)事务rollback之前 缓冲区中的test表格
事务rollback之后 缓冲区的test表格和内存中的test表格
(3)事务rollback to L2之前,缓冲区中的test表格
事务rollback之后 缓冲区中的test表格和内存中的test表格
事务commit之后 内存中的test表格
解释原因:
事务分为隐式事务和显式事务两种。DML语句(insert、update、delete)就是隐式事务。本次实验使用显式事务,在使用显式事务之前,需要关闭自动提交功能,即设置autocommit变量值为0。开启事务:START TRANSACTION;提交/撤销事务:COMMIT;/ROLLBACK;回滚事务:1设置保存点:除了撤销整个事务,用户还可以使用ROLLBACK TO语句使事务回滚到某个点,在这之前需要使用SAVEPOINT语句来设置一个保存点。SAVEPOINT identifier;其中,identifier为保存点的名称。2回滚至保存点:ROLLBACK TO SAVEPOINT语句会向已命名的保存点回滚一个事务。如果在保存点被设置后,当前事务对数据进行了更改,则这些更改会在回滚中被撤销。ROLLBACK TO SAVEPOINT identifier;当事务回滚到某个保存点后,在该保存点之后设置的保存点将被自动删除。
结论:
进行事务设计时的步骤为
#步骤一:开启事务start transaction;
#步骤二:编写事务中的sql语句(insert、update、delete)
#步骤三:结束事务
1commit; #提交事务
2rollback; #回滚事务:就是事务不执行,回滚到事务执行前的状态
如果事务中的所有操作都成功完成,并且希望将更改永久保存到数据库中,可以使用 `COMMIT` 命令来提交事务。否则,只对缓冲区进行更改,无法永久保存到数据库中。
三、实验小结
1.实验中遇到的问题及解决过程
问题:没有将autocommit设置为0
解决过程:因为autocommit是自动提交模式,如果autocommit=1,则每一条SQL语句都会自动提交commit。因此如果想要控制自动提交,可以通过更改autocommit变量来实现,将其设置为0表示关闭自动提交。
2.实验中产生的错误及原因分析
错误: 打开mysql登录A001账号密码时无法set role Admin
ERROR 2013 (HY000): Lost connection to MySQL server during query No connection. Trying to reconnect... Connection id: 58 Current database: *** NONE ***
原因分析:读取初始通信包时MySQL服务器连接丢失,系统错误0
win+r 输入services.msc 找到MySQL服务重新启动