在MySQL中,与SQLServer函数SCOPE_IDENTITY()相当的是什么?

39
3个回答

78

就是你要找的内容:

LAST_INSERT_ID()

针对楼主的评论,我创建了以下性能测试:

CREATE TABLE Foo
(
    FooId INT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE Bar
(
    BarId INT AUTO_INCREMENT PRIMARY KEY
);

INSERT INTO Bar () VALUES ();
INSERT INTO Bar () VALUES ();
INSERT INTO Bar () VALUES ();
INSERT INTO Bar () VALUES ();
INSERT INTO Bar () VALUES ();

CREATE TRIGGER FooTrigger AFTER INSERT ON Foo
    FOR EACH ROW BEGIN
        INSERT INTO Bar () VALUES ();
    END;

INSERT INTO Foo () VALUES (); SELECT LAST_INSERT_ID();

这将返回:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 |
+------------------+

因此,在触发器内部INSERT的表中使用的是原始表的LAST_INSERT_ID(),而不是触发器内部INSERT的表。

编辑:我在所有这些时间之后意识到我的答案中SELECT LAST_INSERT_ID()的结果是错误的,尽管最后的结论是正确的。 我已经更新了结果为正确的值。


谢谢Sean。当我插入数据的表具有触发器,该触发器会在另一个具有自增字段的表中插入数据时,它会如何表现?它会返回原始表的ID还是受触发器影响的表的ID? - kristof
如果我们有多个请求要插入表中的一行,会发生什么情况?它会返回管理员请求的正确值吗? - undefined

3

打开 MySql 命令输入 SELECT LAST_INSERT_ID(); 然后按下 ENTER


1
CREATE TABLE Identity_Temp
(
    Id INT AUTO_INCREMENT PRIMARY KEY,
    Name varchar(200)
);

INSERT INTO Identity_Temp (Name) VALUES ('A');
INSERT INTO Identity_Temp (Name) VALUES ('A');

SELECT LAST_INSERT_ID();

DROP TABLE Identity_Temp;

你可以使用LAST_INSERT_ID()来获取最后插入的自增值,并且你也可以在任何表中进行插入操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接