我有小型POS系统,服务器端使用PHP和MySql(InnoDB)。 完成“销售”后,将执行以下查询以更新库存数量:
"UPDATE products SET qty=qty-:qty, ustatus=1 WHERE pid=:pid";
此语句是否为“并发更新安全”,这意味着我需要任何事务或锁定表。
我只想确保这样的多个查询在同一时间执行 不会弄乱我的库存。
答案 0 :(得分:4)
如果使用innodb,则all sql statements将在事务中执行,您无需明确指定。
并发控制是通过锁而不是事务来完成的。事务只能决定锁的寿命。
update语句放置exclusive lock on the records that it wants to modify,这意味着no other statements can modify(有时甚至无法读取)锁定的记录,直到释放排他锁为止。因此,从并发的角度来看,您的陈述是安全的。