我有一个订单表,其中有一个数量列.在办理登机手续或退房时,我们需要将"数量"列更新一次.有没有办法在一个动作中执行此操作,或者我们必须获取现有值,然后在其上添加或减少一个值?
另一个问题是当我们插入一个新行时,我们是否需要检查是否存在相同的数据然后插入,如果没有,这是两个步骤,还是有更好的方法来执行此操作?
谢谢,
gah*_*ooa 233
回答第一个问题:
UPDATE Orders SET Quantity = Quantity + 1 WHERE ...
Run Code Online (Sandbox Code Playgroud)
回答第二个问题:
有几种方法可以做到这一点.由于您没有指定数据库,我将假设MySQL.
INSERT INTO table SET x=1, y=2 ON DUPLICATE KEY UPDATE x=x+1, y=y+2REPLACE INTO table SET x=1, y=2他们都可以处理你的问题.但是,第一种语法允许更灵活地更新记录而不是仅仅替换它(如第二种方法那样).
请记住,两者都存在,必须定义一个UNIQUE键...
pax*_*blo 11
第一个问题的单步回答是使用类似的东西:
update TBL set CLM = CLM + 1 where key = 'KEY'
Run Code Online (Sandbox Code Playgroud)
这是一种单指令方式.
至于第二个问题,你不应该求助于DBMS特定的SQL体操(比如UPSERT)来获得你想要的结果.有一种标准方法可以执行更新或插入,不需要特定的DBMS.
try:
insert into TBL (key,val) values ('xyz',0)
catch:
do nothing
update TBL set val = val + 1 where key = 'xyz'
Run Code Online (Sandbox Code Playgroud)
也就是说,您首先尝试进行创建.如果它已经存在,请忽略该错误.否则,您使用0值创建它.
然后执行更新,无论是否正常工作:
这不是一个单一的指令,但令人惊讶的是,这是我们长期以来成功地做到这一点的方式.
UPDATE Orders Order
SET Order.Quantity = Order.Quantity - 1
WHERE SomeCondition(Order)
Run Code Online (Sandbox Code Playgroud)
据我所知,SQL 中没有对 INSERT-OR-UPDATE 的内置支持。我建议创建一个存储过程或使用条件查询来实现这一点。在这里,您可以找到针对不同数据库的一系列解决方案。