[英]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.