推荐答案
在 PostgreSQL 中,BEGIN
、COMMIT
和 ROLLBACK
是用于管理事务的关键字。事务是一组 SQL 语句的集合,这些语句要么全部成功执行,要么全部失败回滚。以下是它们的基本用法:
- BEGIN: 用于启动一个新的事务。
- COMMIT: 用于提交事务,使事务中的所有操作永久生效。
- ROLLBACK: 用于回滚事务,撤销事务中的所有操作。
示例代码
-- -------------------- ---- ------- ------ -- ---- -- ---- --- -- ------ -------- --- ------- - ------- - --- ----- ------- - -- ------ -------- --- ------- - ------- - --- ----- ------- - -- -- ----------- ------- -- ----------- ---------
本题详细解读
1. BEGIN 语句
BEGIN
语句用于启动一个新的事务。在事务开始后,所有的 SQL 操作都会被视为一个整体,直到事务被提交或回滚。
BEGIN;
2. COMMIT 语句
COMMIT
语句用于提交事务。提交后,事务中的所有操作将永久生效,数据将被写入数据库。
COMMIT;
3. ROLLBACK 语句
ROLLBACK
语句用于回滚事务。如果在事务执行过程中发生错误,或者你决定撤销事务中的所有操作,可以使用 ROLLBACK
语句。回滚后,事务中的所有操作将被撤销,数据库将恢复到事务开始前的状态。
ROLLBACK;
4. 事务的 ACID 特性
事务在 PostgreSQL 中遵循 ACID 特性:
- 原子性 (Atomicity): 事务中的所有操作要么全部成功,要么全部失败。
- 一致性 (Consistency): 事务执行前后,数据库的状态必须保持一致。
- 隔离性 (Isolation): 多个事务并发执行时,每个事务都感觉不到其他事务的存在。
- 持久性 (Durability): 一旦事务提交,其结果将永久保存在数据库中。
5. 自动提交模式
在 PostgreSQL 中,默认情况下,每条 SQL 语句都会自动提交。如果你希望手动控制事务,可以使用 BEGIN
语句显式地启动事务。
-- 关闭自动提交 SET AUTOCOMMIT = OFF; -- 现在每条 SQL 语句都需要显式提交 BEGIN; INSERT INTO users (name) VALUES ('Alice'); COMMIT;
6. 嵌套事务
PostgreSQL 不支持真正的嵌套事务,但你可以使用 SAVEPOINT
来实现类似的功能。
-- -------------------- ---- ------- ------ ------ ---- ----- ------ ------ -------- --------- ------------- ------ ---- ----- ------ ------ ------------ -- ------ -------- -- ------------- -------
在这个例子中,ROLLBACK TO my_savepoint
会撤销插入 Charlie
的操作,但保留插入 Bob
的操作。