id = LAST_INSERT_ID(id)的含义

时间:2013-05-23 02:15:28

标签: mysql

假设我有一张桌子:

CREATE TABLE files (
    id_prod INT UNSIGNED NOT NULL DEFAULT PRIMARY KEY AUTO_INCREMENT,
    id_rel INT UNSIGNED,
    name VARCHAR(250),
    other VARCHAR(200),
    UNIQUE INDEX(id_rel , name)
);

我希望使用唯一的query来插入/更新此表中的数据:

INSERT INTO files (id_rel , name)
VALUES ('25', 'test')
ON DUPLICATE KEY UPDATE

现在,阅读我读到的MySQL手册:

ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)

所以我认为我的查询应该是:

INSERT INTO files (id_rel , name)
VALUES ('25', 'test')
ON DUPLICATE KEY UPDATE id_prod = LAST_INSERT_ID(id), name = 'TESTED'

但是如果我只使用它会有区别:

INSERT INTO files (id_rel , name)
VALUES ('25', 'test')
ON DUPLICATE KEY UPDATE name = 'TESTED'

我无法理解LAST_INSERT_ID(id)的含义。什么是(id)以及它应该做什么?

1 个答案:

答案 0 :(得分:1)

仅在您的应用需要在执行LAST_INSERT_ID()后致电INSERT时才需要这样做。通常情况下,如果您实际在表中插入了新行,LAST_INSERT_ID()将只返回一个值,而不是重复键,而是更新了行。

来自documentation

  

如果 expr 作为LAST_INSERT_ID()的参数给出,则该函数返回参数的值,并将其记为LAST_INSERT_ID()返回的下一个值。

如果您使用引用的惯用语,LAST_INSERT_ID()将返回插入的新行的ID或更新的行。