0

在 PHP 中使用 mysqli::insert_id 进行 INSERT INTO ON DUPLICATE KEY UPDATE 时,如果行已更新,我将继续获取下一个自动增量而不是更新的行。在同一个数据库但在另一个表中,使用 ON DUPLICATE KEY UPDATE 时我没有这种行为。相反,我得到了更新行的 id。但是现在由于某种原因,在我创建的新表中,我不断得到下一个甚至不存在的 id。这两个表都是 MyISAM,并且有一个自动增量字段。我不明白为什么他们的行为不同。

例子:

==================================
Table: example
==================================
id  |   unique_field    |   data
==================================
1   |   unique1         |   123
2   |   unique2         |   456

INSERT INTO
    example
SET
    unique_field = 'unique1',
    data = '321'
ON DUPLICATE KEY UPDATE
    data = '321'


// mysqli::insert_id returns 3 (not 1)!!

有任何想法吗?

4

1 回答 1

1

mysql手册

如果表包含 AUTO_INCREMENT 列并且 INSERT ... UPDATE 插入一行,则 LAST_INSERT_ID() 函数将返回 AUTO_INCREMENT 值。如果该语句改为更新一行,则 LAST_INSERT_ID() 没有意义。但是,您可以使用 LAST_INSERT_ID(expr) 解决此问题。假设 id 是 AUTO_INCREMENT 列。要使 LAST_INSERT_ID() 对更新有意义,请按如下方式插入行:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3; 使用 ON DUPLICATE KEY UPDATE 时忽略 DELAYED 选项。

希望有帮助。

于 2011-09-14T13:54:19.920 回答