我有PostgreSQL的事務,我執行以下命令:PostgreSQL鎖定行之前刪除?
SELECT "amount", "accountId" from "transactions" where "id" = "123"
DELETE from "transactions" where "id" = "123"
UPDATE "accounts" set "balance" = "balance" - amountFetchedInCommand1 where "id" = accountFetchedInCommand1
現在我需要確保命令1和2行之間取自transactions
不會被修改(特別是其amount
和accountId
字段)。
我可以使用SELECT FOR UPDATE
語句來鎖定在命令1處獲取的行,即使我不打算更新該行但只是將其刪除嗎?
否則確保此操作始終正確運行的最佳方法是什麼?
(transactions.accountId
是掛account.id
與ON DELETE CASCADE
外鍵)
是的,你可以使用'選擇update'但爲什麼你需要的'select'呢?爲什麼不直接刪除行?一旦它被刪除,無論如何沒有其他交易可以修改它。順便說一句:''123「'是一個列名不是數字。您應該使用'where id = 123' –
@a_horse_with_no_name謝謝,我需要從中獲取「金額」值,以便我可以更新鏈接的「帳戶」行中的餘額 –
並且postgresql不會返回已刪除的行 –