2016-06-14 23 views
1

我认为这很容易解决,但我遇到了麻烦。我将记录插入带有自动递增ID的表格中。在重复键更新时,我希望自动递增的ID保持不变(不更新)。举例来说,假设我有如下表:如何禁用自动递增ID更新重复密钥更新?

+-------------+-----------+------+ 
| ID   | Fruit  | Color| 
+-------------+-----------+------+ 
| 1   | Apple  | Red | 
| 2   | Apple  | Green| 
+-------------+-----------+------+ 

然后我运行:

INSERT INTO table (Fruit, Color) VALUES(
    Apple, Red) 

由于我的唯一关键的是(水果,彩色)(也ID是一个单独的一个),我想当我的表更新时,ID列保持原样(ID = 1);然而,当我插入上面的值时,ID自动递增到3.

有人可以提供ON DUPLICATE KEY UPDATE语句来防止ID值在更新时增加吗?

INSERT INTO table (Fruit, Color) VALUES(
    Apple, Red) 
ON DUPLICATE KEY UPDATE (
{statement here}) 
+0

MySQL如何知道插入哪个值?另外,我不认为触发在这里是可能的。 –

回答

1

必须使主键ID列然后设置(水果,颜色)作为一个独特的关键。然后你可以运行@Andrew B Anthony提供的查询:

INSERT INTO table (Fruit, Color) VALUES 
    Apple, Red) 
ON DUPLICATE KEY UPDATE 
Fruit=values(Fruit), 
Color=values (Color) 
1

您可以使用下面的查询,如果您的(水果,颜色),将工作的唯一密钥

INSERT INTO table (Fruit, Color) VALUES(Apple, Red) 
ON DUPLICATE KEY UPDATE 
Fruit=values(Fruit),Color=values (Color) 
+0

关闭。 ID必须是主键和(水果,颜色)一个唯一的键 – ProgrammingWithRandy

+0

@ProgrammingWithRandy它会工作,如果你的(水果,颜色)是一个独特的关键 –