[数据库实验七]事务设计

目录

一、实验目的与要求

二、实验内容

三、实验小结


实验中涉及的数据参考:[数据库实验一]数据库和表-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服务重新启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值