2013-05-12 80 views
0

我有几个列的表,我正在做一个倍增插入它。mysql插入和重复更新

即:

INSERT INTO accounting_positions 
KEYS (`date`, `customer`, `type`, `product`, `volume`, `payout`, `count`) 
VALUES ('2012-01-10','10','regular','60sec',65,83,13), 
('2012-01-10','10','regular','binary',15,83,13) 
ON DUPLICATE KEY UPDATE volume=volume+CURRENT_COL_VAL; 

我应该怎么写,而不是 “CURRENT_COL_VAL”? 如果我想用我插入的值更新重复行。

,因为我不能把它里面一个静态的数字,因为它是在多重插入

+0

您从哪里得到上述静态数字?它们中有没有一个是音量? – Sebas 2013-05-12 12:40:27

+0

我编辑插入查询,所以你可以看到表键,与每个插入行你得到不同的数据,所以每个插入重复键上的更新是不同的 – 2013-05-12 12:43:34

+0

所以你为什么在这里放置一个硬编码的“65”值在这里它一直在变化吗? – Sebas 2013-05-12 12:48:14

回答

2

看看在mysql docu on insert-on-duplicate从那里每行插入不同,你可以看到,你可以使用这样的事情:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
    ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 

你的情况:

INSERT INTO accounting_positions 
    (`date`, `customer`, `type`, `product`, `volume`, `payout`, `count`) 
VALUES 
    ('2012-01-10','10','regular','60sec',65,83,13), 
    ('2012-01-10','10','regular','binary',15,83,13) 
ON DUPLICATE KEY UPDATE volume=volume+VALUES(volume); 

这将添加新的和旧的价值。如果您只想让给定的插入值过度使用该行,请执行以下操作:ON DUPLICATE KEY UPDATE volume=VALUES(volume)

+0

可能错过了,谢谢! – 2013-05-12 13:22:39