一、实验目的与要求:
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 撤销所有未提交的更改,确保数据的一致性与完整性。实验中还发现,在未提交前数据仅对当前会话可见,不会影响其他用户。