[英]How to prevent concurrency issue with database update?
我有以下序列,可以隨時由我的程序的多個實例執行:
步驟1:檢查帳單是否未付款
步驟2:如果未付帳單,則將帳單標記為已付
我擔心我的程序的實例1和實例2幾乎都同時執行步驟1,因此都繼續執行步驟2。如何防止這種情況發生?
使用(可序列化的) TRANSACTION
。 更多詳細信息取決於您的數據庫平台
不看代碼就很難具體說明這一點,但是顯而易見的方法是將步驟1和2結合起來。
因此,代替:
$invoice_status = call_database(
select INVOICE_STATUS
from INVOICES
where INVOICE_ID = $invoice_id)
if ($invoice_status = UNPAID){
call_database (
UPDATE INVOICES
SET INVOICE_STATUS = PAID
WHERE INVOICE_ID = $invoice_id)
}
你會做類似的事情
call_database(
update invoices
set invoice_status = PAID
where invoice_id = $invoice_id
and invoice_status = UNPAID)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.