【发布时间】:2016-06-20 01:13:46
【问题描述】:
我有以下型号
Inventory [product_name, quantity, reserved_quantity]
有数据
[Shirt, 1, 0]
[Shorts, 10, 0]
如果以下代码同时在多个线程中执行会怎样?
$changes = [
['name' => 'Shirt', 'qty' => 1],
['name' => 'Shorts', 'qty' => 1],
];
$db->startTransaction();
foreach($changes as $change){
$rowsUpdated = $db->exec("UPDATE inventory
SET reserved_quantity = reserved_quantity + $change['qty']
WHERE product_name = $change['name']
and quantity >= reserved_quantity + $change['qty']");
if($rowsUpdated !== 1)
$db->rollback();
exit;
}
$db->commit();
结果会是这样吗?
[Shirt, 1, 2]
[Shorts, 10, 2]
【问题讨论】:
标签: php mysql concurrency transactions