数据库实验七:事务设计

发布于:2025-05-12 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、实验目的与要求:

1.熟悉提交事务
2.回滚事务
3.检查点技术
注:可以用可视化软件来实现

二、实验内容:

基于现有数据库设计事务提交、事务回滚、及检查点实验,观察比较提交前后执行结果并分析。

(1)设计事务提交

源码:

-- 开始事务
START TRANSACTION;

-- 插入一个订单(假设客户编号为10001)
INSERT INTO orders (o_date, c_id) VALUES (NOW(), 10001);
-- 获取新订单编号
SET @new_order_id = LAST_INSERT_ID();
-- 插入订单明细
INSERT INTO orderitems (o_num, o_item, f_id, quantity, item_price)
VALUES 
(@new_order_id, 1, 'A001', 2, 5.99),
(@new_order_id, 2, 'A002', 1, 3.50);
-- 提交事务
COMMIT;

运行测试结果截图:
事务commit之前 ,缓冲区中的orders表格和内存中的orders表格对比
缓冲区:
在这里插入图片描述

内存区:
在这里插入图片描述

事务commit之后 ,缓冲区中的orders表格和内存中的orders表格对比
内存区:
在这里插入图片描述

解释原因:
在执行 START TRANSACTION 到 COMMIT 之间(尚未提交):插入操作只对当前会话可见,其他数据库连接或用户看不到你插入的数据;
一旦执行 COMMIT:所有操作被永久写入数据库,数据对所有用户和连接立即可见;

(2)设计事务回滚

源码:

-- 开始事务
START TRANSACTION;
-- 插入订单(假设客户编号为10002)
INSERT INTO orders (o_date, c_id) VALUES ('2025-05-06 12:00:00', 10002);
-- 获取新订单编号
SET @rollback_order_id = LAST_INSERT_ID();
-- 插入订单明细
INSERT INTO orderitems (o_num, o_item, f_id, quantity, item_price)
VALUES 
(@rollback_order_id, 1, 'A003', 4, 4.20);
-- 回滚事务
ROLLBACK;

运行测试结果截图:
事务rollback之前 缓冲区中的orders表格:
在这里插入图片描述

事务rollback之后 缓冲区的orders表格:
在这里插入图片描述

解释原因:
ROLLBACK 撤销整个事务过程,数据完全撤销,没有写入数据库。

二、实验小结

本次实验通过对事务提交(COMMIT)与回滚(ROLLBACK)的操作练习,加深了我对事务机制的理解。通过 START TRANSACTION 开启事务后,可以将多条操作语句视为一个整体执行,只有在最终提交后,数据才会真正写入数据库;若在事务中出现错误或需要取消操作,可通过 ROLLBACK 撤销所有未提交的更改,确保数据的一致性与完整性。实验中还发现,在未提交前数据仅对当前会话可见,不会影响其他用户。


网站公告

今日签到

点亮在社区的每一天
去签到