MST
星途 面试题库

面试题:SQLite中的事务处理与并发控制

在SQLite中,假设有两个表 'accounts'(包含字段 'account_id' 主键,'balance' 余额)和 'transactions'(包含字段 'transaction_id' 主键,'from_account_id','to_account_id','amount' 交易金额)。请编写一段SQLite代码实现从一个账户向另一个账户转账的操作,并保证在并发情况下数据的一致性(需使用事务处理)。
44.2万 热度难度
数据库SQLite

知识考点

AI 面试

面试题答案

一键面试
BEGIN TRANSACTION;
UPDATE accounts
SET balance = balance - (SELECT amount
                         FROM transactions
                         WHERE transaction_id = <specific_transaction_id>)
WHERE account_id = (SELECT from_account_id
                    FROM transactions
                    WHERE transaction_id = <specific_transaction_id>);

UPDATE accounts
SET balance = balance + (SELECT amount
                         FROM transactions
                         WHERE transaction_id = <specific_transaction_id>)
WHERE account_id = (SELECT to_account_id
                    FROM transactions
                    WHERE transaction_id = <specific_transaction_id>);
COMMIT;

<specific_transaction_id>替换为实际的交易ID。此代码块开启一个事务,先从转出账户减去交易金额,再向转入账户增加交易金额,最后提交事务以确保并发情况下的数据一致性。