在PHP脚本中,我使用MySQL INSERT ... ON DUPLICATE KEY UPDATE
命令在我的数据库中插入/更新许多记录。
有没有MySQL返回来说明插入或更新了哪些记录?
'丑陋'的方法是在每个INSERT之前进行SELECT,看看每个INSERT之前是否存在键,但我想知道MySQL是否内置了这个函数。 如果有人需要有关我正在尝试做的更多信息,请将记录ID保存到日志中。
答案 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