主要问题
是否有一个sql命令可以从表行中选择一个值,并在同一个sql命令中更新该值?
更详细的问题
我在一个电子商务网站上工作,在那里我使用mysql数据库,它有一个 products
表,该表包含等待它的产品列表。
本表包括 quantity
字段和a sold
现场。
这个 quantity
表示所生产产品的总量,以及 sold
是该产品的当前销售量/用户购买量。
所以如果 sold
字段是否与 quantity
我想更新前端的html,以表明它是脱销。
因此,当用户购买“x”数量的产品时,我知道我可以执行以下两个sql命令来更新 sold
字段: SELECT sold FROM products WHERE productID = ?
我要倒满它 ?
使用刚购买的产品的id。
在得到那个之后 sold
值,然后执行更新命令,例如: UPDATE products SET sold = ? WHERE productID = ?
执行两个不同的sql命令是最好的方法吗?或者最好将其合并到一个sql命令中?
另外,我怎样才能最好地锁定这个特定的 product
在表中使用sql语句,以便如果用户a在用户b购买同一产品的同时购买产品“xyz”,则该产品不存在竞争条件 sold
要更新的字段?
更新:我正在使用java与mysql数据库通信。
1条答案
按热度按时间mwg9r5ms1#
最好将其作为两个独立的sql语句来执行。事实上,这是必要的。
你这样做:
(这些都是sql语句,但如何将其应用于java或其他任何编程语言取决于您自己。也可能有java方法用于启动事务和提交,它们做同样的事情,所以可以使用它们。)
这个
FOR UPDATE
获取所检查行上的锁,与UPDATE
. 锁一直保持到事务提交为止。因此,您可以更新它,而不必担心并发会话的竞争条件。但是要确保选择、更新和提交都是及时的。我看到许多开发人员做选择。。。对于更新,然后在更新和更新之间,他们的应用程序执行一堆其他代码,包括可能需要一段时间的事情,比如调用其他服务的api。您希望毫不延迟地进行提交,因为锁将使其他并发会话等待。