繁体   English   中英

插入时锁定另一个表中的行

[英]Lock row from another table while inserting

我正在开发一家银行 API,我有一个关于行锁的问题。 我有交易表、客户表和帐户表,并将用户余额存储在帐户表中。 每当我在事务中插入新行时,我想锁定帐户表中的余额列,因为插入新事务会更改用户余额,所以我想锁定用户帐户行直到插入完成。 有人可以帮帮我吗?

首先尝试在帐户表上设置更新锁。

BEGIN TRAN;

    INSERT INTO TransactionTable
    SELECT @client_id, @amount, ...
    WHERE EXISTS
    (
        SELECT 1
        FROM AccountTable A WITH (UPDLOCK)
        WHERE A.client_id = @client_id
    );

    UPDATE AccountTable
    SET amount = amount + @amount
    WHERE client_id = @client_id;

COMMIT;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM