这是有效的“重复键”语法吗?

时间:2013-08-19 22:41:28

标签: mysql on-duplicate-key

我现在没有地方可以测试这个,我希望有人知道,所以我不必等到明天才能找到....

   insert into item_properties (ItemID, PropID, Value, UpdateOn)  values 

      (538,  25, 'some description stuff goes here', unix_timestamp()),  
      (541,  25, 'some description stuff goes here', unix_timestamp()),  
      (1276, 25, 'some description stuff goes here', unix_timestamp()),  
      (1319, 25, 'some description stuff goes here', unix_timestamp()) 

   on duplicate key update  
            ItemID   = values(ItemID), 
            PropID   = values(PropID), 
            Value    = values(Value),  
            UpdateOn = values(UpdateOn)   

可以重写为:

   insert into item_properties (ItemID, Value)  values 

      (538,  'some description stuff goes here'),
      (541,  'some description stuff goes here'), 
      (1276, 'some description stuff goes here'),
      (1319, 'some description stuff goes here')

   on duplicate key update  
            ItemID   = values(ItemID), 
            Value    = values(Value),  
            PropID   = 25, 
            UpdateOn = unix_timestamp()  

或者否,因为PropID部分无法访问UpdateOnon dup而不在值列表中...?

我试过SQLFiddle,但它告诉我一些没有DDL或DML语句,只选择。


所以我测试了filddle ......

insert into item_properties (ItemID, Value)  values 

      (538,  'some description stuff goes here'),
      (538,  'some other description stuff goes here'),
      (1276, 'some description stuff goes here'),
      (1319, 'some description stuff goes here')

   on duplicate key update  
            ItemID   = values(ItemID), 
            PropID   = 26, 
            Value    = values(Value),  
            UpdateOn = unix_timestamp()

变成:

ITEMID       PROPID     VALUE                                    UPDATEON
538          26         some other description stuff goes here   1376952345
1276         (null)     some description stuff goes here         (null)
1319         (null)     some description stuff goes here         (null)

这不是预期的输出......

所以...我猜这两件事真的做同样的事情,我不需要按照我最初的建议重新编写代码。 这是有效的语法,但结果不正确。

只是为了澄清(但我确信你可以通过最初的on duplicate key语句来判断),这是我应该最终得到的输出......

ITEMID       PROPID     VALUE                                    UPDATEON
538          26         some other description stuff goes here   1376952345
1276         26         some description stuff goes here         1376952345
1319         26         some description stuff goes here         1376952345

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是有效的SQL。也就是说,上述两个INSERT ... ON DUPLICATE KEY UPDATE语句具有相同的效果。

这可以通过SQLFiddle显示,只是插入必须是DDL的一部分。

http://sqlfiddle.com/#!2/56579/1/0

ItemID = VALUES(ItemID)如果是重复的密钥也毫无意义。