1

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

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

4

2 回答 2

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 语句,如果将行作为新行插入,则受影响的行值为 1,如果更新现有行,则值为 2。

于 2013-05-15T18:58:57.127 回答
1

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

INSERT INTO YourTable (Col1, Col2, Updated)
VALUES ("value1", "value2", 0)
ON DUPLICATE KEY UPDATE
    Col1 = values(Col1),
    Col2 = values(Col2),
    Updated = 1
于 2013-05-15T19:02:04.730 回答