结构化查询语言(Structured Query Language)
Completion requirements
数据库管理系统(DBMS)的事务管理:COMMIT 和 ROLLBACK
DBMS 提供了一项特殊功能,可以撤销单个或多个连续的写入和删除操作。这是通过 ROLLBACK 命令实现的。在修改数据时,DBMS 首先将新增、修改或删除的数据写入一个临时空间。在此阶段,这些修改并未成为数据库的“正式”部分。如果确认这些修改需要永久保存,可以使用 COMMIT 命令;如果想撤销这些更改,可以使用 ROLLBACK 命令。所有这些操作都被视为一个事务的一部分。
COMMIT 和 ROLLBACK 的语法
COMMIT WORK; -- 提交自上次 COMMIT 或 ROLLBACK 以来的所有 INSERT、UPDATE 和 DELETE 操作
ROLLBACK WORK; -- 撤销自上次 COMMIT 或 ROLLBACK 以来的所有 INSERT、UPDATE 和 DELETE 操作
注意:WORK
是可选的。
关闭 AUTOCOMMIT
某些 DBMS 默认启用了 AUTOCOMMIT 功能,这会在每次写操作(INSERT、UPDATE 或 DELETE)后自动执行 COMMIT。虽然这不是 SQL 标准的一部分,但在某些实现中是默认行为。如果需要使用 ROLLBACK 命令,必须先关闭 AUTOCOMMIT。
关闭 AUTOCOMMIT 的方法可能包括以下命令,或者在 GUI 中通过点击某些按钮:
SET autocommit = 0;
SET autocommit OFF;
使用 COMMIT 测试插入和删除
插入新行并提交
-- 插入一位新用户
INSERT INTO person (id, firstname, lastname, date_of_birth, place_of_birth, ssn, weight)
VALUES (99, 'Harriet', 'Flint', DATE'1970-10-19', 'Dallas', '078-05-1120', 65);
-- 确认插入是否成功(期望有一条记录)
SELECT * FROM person WHERE id = 99;
-- 提交更改
COMMIT;
-- 再次确认记录是否仍然存在(期望有一条记录)
SELECT * FROM person WHERE id = 99;
删除行并提交
-- 删除用户
DELETE FROM person WHERE id = 99;
-- 确认删除是否成功(期望无记录)
SELECT * FROM person WHERE id = 99;
-- 提交更改
COMMIT;
-- 再次确认记录是否被删除(期望无记录)
SELECT * FROM person WHERE id = 99;
使用 ROLLBACK 恢复更改
恢复单行记录
-- 删除示例数据中的 Lisa Hamilton
DELETE FROM person WHERE id = 3;
-- 确认删除(期望无记录)
SELECT * FROM person WHERE id = 3;
-- 使用 ROLLBACK 恢复删除
ROLLBACK;
-- 确认记录是否恢复(期望有一条记录)
SELECT * FROM person WHERE id = 3;
恢复多行记录和不同表的更改
-- 删除 Lisa Hamilton
DELETE FROM person WHERE id = 3;
-- 修改所有 email 类型的联系方式
UPDATE contact SET contact_value = 'unknown' WHERE contact_type = 'email';
-- 验证更改
SELECT * FROM person;
SELECT * FROM contact;
-- 使用 ROLLBACK 恢复所有更改
ROLLBACK;
-- 验证是否恢复
SELECT * FROM person;
SELECT * FROM contact;
总结
- COMMIT 用于永久保存事务中的更改。
- ROLLBACK 用于撤销事务中的更改。
- AUTOCOMMIT 默认开启时,需手动关闭以便使用事务管理。
- ROLLBACK 可恢复多个表中的更改,适用于复杂事务场景。
通过以上示例,我们可以看到事务管理是确保数据一致性的重要手段。
Last modified: Tuesday, 28 January 2025, 1:43 PM