INSERT ... ON DUPLICATE KEY UPDATE如何判断更新哪些记录以及插入哪些记录

时间:2013-05-15 18:54:37

标签: mysql

在PHP脚本中,我使用MySQL INSERT ... ON DUPLICATE KEY UPDATE命令在我的数据库中插入/更新许多记录。 有没有MySQL返回来说明插入或更新了哪些记录?

'丑陋'的方法是在每个INSERT之前进行SELECT,看看每个INSERT之前是否存在键,但我想知道MySQL是否内置了这个函数。 如果有人需要有关我正在尝试做的更多信息,请将记录ID保存到日志中。

2 个答案:

答案 0 :(得分:2)

您需要另外SELECT,特别是SELECT ROW_COUNT()

来自http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

  

对于INSERT ... ON DUPLICATE KEY UPDATE语句,如果将行作为新行插入,则affected-rows值为1,如果更新现有行,则为2。

答案 1 :(得分:1)

不,没有办法告诉哪些记录是插入的,哪些是纯粹使用MySQL提供的方法更新而没有其他查询。但是,您可以在表中添加一个列,您可以在其中保留一个指示符,您可以使用该指示符将记录标记为已更新而不是插入,例如。

INSERT INTO YourTable (Col1, Col2, Updated)
VALUES ("value1", "value2", 0)
ON DUPLICATE KEY UPDATE
    Col1 = values(Col1),
    Col2 = values(Col2),
    Updated = 1