在影响表的所有行的重复键更新结果上

时间:2014-05-15 23:45:57

标签: mysql

我有一个这种结构的表格:

mysql> desc securities;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| sym             | varchar(19) | NO   | PRI |         |       |
| bqn             | int(11)     | YES  |     | NULL    |       |
| sqn             | int(11)     | YES  |     | NULL    |       |
| tqn             | int(11)     | YES  |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

我正在尝试在同一个查询中进行选择和更新,因此我选择了

insert into securities (sym, bqn, sqn , tqn) values('ANK', 50,0,1577798) 
on duplicate key update  bqn=bqn+50 , sqn=sqn+0 , tqn=tqn+1577798;

当我运行上面的内容时,我发现它实际上也改变了所有其他行的值。

预计会出现这种情况吗?我正在使用MySQL数据库。

1 个答案:

答案 0 :(得分:1)

你的小提琴缺少密钥,右侧面板中的INSERT语句(它不属于第一个位置)使用不同的列名... *叹*

symbol列定义为PRIMARY KEY - 并使用VALUES()语法获取要在ON UPDATE部分中添加的值,这样您就不必每次都重复

insert into securities
  (symbol, buyerquan, sellerquan , totaltradedquan)
  values('BANKBARODA', 73, 0, 4290270) 
  on duplicate key update  
    buyerquan=buyerquan+VALUES(buyerquan),
    sellerquan=sellerquan+VALUES(sellerquan),
    totaltradedquan=totaltradedquan+VALUES(totaltradedquan);

完全正常,结果值可以从输入中得到:http://sqlfiddle.com/#!2/21638f/1