我有一个这种结构的表格:
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数据库。
答案 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