MST

星途 面试题库

面试题:PostgreSQL中事务启动方式及常规使用场景

在PostgreSQL中,有哪些常见的启动事务的语句?请举例说明在一个简单的银行转账场景中,如何使用事务确保数据的一致性,假设涉及两个账户的金额变动。
22.4万 热度难度
数据库PostgreSQL

知识考点

AI 面试

面试题答案

一键面试

常见启动事务的语句

  1. BEGIN:开启一个事务块。例如:
BEGIN;
-- 事务内的SQL语句
COMMIT;
  1. START TRANSACTION:也用于启动事务,它还可以带有一些事务选项,如隔离级别等。例如:
START TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 事务内的SQL语句
COMMIT;

银行转账场景确保数据一致性

假设存在两个账户 account1account2,分别有余额 balance1balance2,要从 account1account2 转账 amount 金额。

BEGIN;
-- 检查account1余额是否足够
SELECT balance INTO @balance1 FROM accounts WHERE account_name = 'account1';
IF @balance1 >= amount THEN
    -- 更新account1余额
    UPDATE accounts SET balance = balance - amount WHERE account_name = 'account1';
    -- 更新account2余额
    UPDATE accounts SET balance = balance + amount WHERE account_name = 'account2';
    COMMIT;
ELSE
    ROLLBACK;
END IF;

在上述代码中:

  1. 首先使用 BEGIN 开启事务。
  2. 从数据库中查询 account1 的余额,并判断余额是否足够转账。
  3. 如果足够,则更新 account1account2 的余额,最后使用 COMMIT 提交事务,确保数据持久化。
  4. 如果余额不足,则使用 ROLLBACK 回滚事务,撤销之前在事务内执行的所有操作,保证数据一致性。