2012-12-04 115 views
3

我将需要一个SQL查询,将INSERT .. ON DUPLICATE KEY UPDATE(或INSERT IGNORE INTO)我的表。INSERT IGNORE - 如何判断是否插入?

我需要知道是否更新实际上发生或者插入了新行。

一个很好的参考是这个SO answer,不幸的是没有采取行动的答案。

至于现在,我使用INSERT ..对重复密钥更新:

INSERT INTO `tbl` (`CLIENT_ID`, `COMP_ID`, `DATETIME`) VALUES (12334,32,NOW()) 
        ON DUPLICATE KEY UPDATE 
        `COMP_ID`=VALUES(`COMP_ID`), `DATETIME`=VALUES(`DATETIME`);"; 

,并检查affected_rows值。
如果affected_rows等于1,意味着 - >新行插入
如果affected_rows等于2,意味着 - >行更新

我想没有变化在重复的情况下发生的,但我想知道重复存在。

使用MySQL

+1

[文档中]埋(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html) - 一个新的插入将返回1个受影响的行,而更新将return 2.如果忽略,INSERT IGNORE'将返回0,我相信。 –

回答

4

检查受影响的行数:

  • 1返回值是指INSERT发生
  • 2返回值是指UPDATE发生

如果您使用的是JDBC,则返回值为int拨打update()或​​。

所有的框架都有一个方法将这个值传回给你,例如Hibernate的Query.executeUpdate()返回这个int的值。

+0

影响的行:受上一INSERT,UPDATE的行数,替换或删除查询。我认为这不会有帮助。 –

+0

@RomanNewaza是的,它确实有帮助。 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html –

+0

@Michael Berkowski:哦,对!很高兴知道! –