MySQL 并发更新
Posted
技术标签:
【中文标题】MySQL 并发更新【英文标题】:MySQL concurrent updates 【发布时间】:2018-06-21 09:04:03 【问题描述】:我有小型 POS 系统,服务器端使用 php 和 mysql (InnoDB)。 当“销售”完成时,执行以下查询以更新库存数量:
"UPDATE products SET qty=qty-:qty, ustatus=1 WHERE pid=:pid";
这个语句是否是“并发更新安全”,这意味着我需要任何事务或锁定表。
我只是想确定,像这样的多个查询是同时执行的 不会弄乱我的库存。
【问题讨论】:
你可以查看这个帖子***.com/questions/4980801/… 【参考方案1】:如果你使用innodb,那么all sql statements在一个事务中执行,你不需要显式指定。
并发控制是通过锁而不是事务来完成的。事务可能只决定锁的寿命。
更新语句放置一个exclusive lock on the records that it wants to modify,意思是no other statements can modify(有时甚至无法读取)锁定的记录,直到排他锁被释放。因此,从并发的角度来看,您的语句是安全的。
【讨论】:
这是否意味着,当记录被锁定时,以下查询将被放入队列并稍后执行? 是的,类似的东西。但是,问题中的更新语句是原子的,并且您似乎在事务中没有其他语句,因此任何锁都只会保留几分之一秒,因此不会进行真正的排队。以上是关于MySQL 并发更新的主要内容,如果未能解决你的问题,请参考以下文章
MySQL更新表设置count = count +1并发问题