当前位置: 首页 > 知识库问答 >
问题:

是否从MySQL插入查询中获取新记录主键ID?

秦英发
2023-03-14

假设我在我的一个表中执行MySQLinsert操作,该表具有列item_id,该列被设置为autoincrementprimary key

如何获取查询以输出同一查询中新生成的主键item_id的值?

目前,我正在运行第二个查询来检索id,但这似乎不是一个好的做法,因为这可能会产生错误的结果。

如果这是不可能的,那么什么是最佳实践,以确保我检索正确的ID?

共有3个答案

宗政霄
2023-03-14

last_insert_id()文档中:

生成的ID在服务器中按每个连接进行维护

也就是说,如果同时对脚本有两个单独的请求,它们不会影响彼此的last_insert_id()(除非您使用的是持久连接)。

桓宜
2023-03-14

小心!!如果试图在PHP中返回此主键值,则为last_insert_id()

我知道这个线程不是PHP标记的,但是对于任何一个想通过使用标准mysql_query调用从PHP脚本插入返回MySQL插入id的人来说--如果不捕获SQL错误,这是行不通的,也是不明显的。

较新的mysqli支持多个查询-last_insert_id()实际上是原始查询的第二个查询。

IMO单独的select来标识最后一个主键比可选的mysql_insert_id()函数更安全,该函数返回从上一个insert操作生成的auto_increment id

戚星腾
2023-03-14

您需要使用last_insert_id()函数:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

例如:

INSERT INTO table_name (col1, col2,...) VALUES ('val1', 'val2'...);
SELECT LAST_INSERT_ID();

这将返回插入的最后一行的主键值:

生成的ID在服务器中按每个连接进行维护。这意味着函数返回给给定客户端的值是该客户端为影响AUTO_INCREMENT列的最近语句生成的第一个AUTO_INCREMENT值。

因此last_insert_id()返回的值是每个用户的,不受可能在服务器上运行的来自其他用户的其他查询的影响。

 类似资料:
  • 问题内容: 好的,可以说我正在对一个表进行mysql操作,并且该表的列设置为和。 如何获得查询以在同一查询中输出新生成的主键的值? 目前,我正在运行第二个查询来检索ID,但是考虑到这可能会产生错误的结果,这似乎不是一种好习惯。 如果这不可能,那么确保我检索正确ID的最佳实践是什么? 问题答案: 您需要使用以下功能:http : //dev.mysql.com/doc/refman/5.0/zh-

  • 问题内容: 我正在使用Python 在mysql中运行查询 运行查询后,我想知道该行的主键。我知道有查询 但是我不确定它是否可以与插入忽略一起使用 做这个的最好方式是什么? 问题答案: 文档的说: 如果使用INSERT IGNORE并且忽略该行,则AUTO_INCREMENT计数器不会增加,并且LAST_INSERT_ID()返回0,这表明没有插入行。 知道了这一点,您可以将其分为多个步骤: 插入

  • 我正在使用mssql。插入记录后,我想获取数据的id。但我不知道该怎么做。我的代码如下。请给我答案。 Insert工作正常,但控制台日志[未定义]。。。。 这是表的ddl 在GO上设置ANSI\U NULL,在GO上设置QUOTED\U IDENTIFIER。[特征]( [id]nvarchar NOT NULL CONSTRAINT[DF\u Feature\u id]DEFAULT(CONVE

  • Val1 Val2 Val3 Val4 Val5 Val6 Val7 Val8 Val9 Val10 Val11 Val12 Col1 Col2 Col3 Col4 Col5 Col6 Val1 Val2 Val3 Val4 Col5 Val5 Val1 Val2 Val3 Val4 Col6 Val6 Val1 Val2 Val3 Val4 Col7 Val7 Val1 Val2 Val3 Va

  • 问题内容: 我正在将数据有问题地插入表中。当我从另一个表执行此操作时,它很快,但如果有很多记录,则只会非常缓慢地放慢速度。即使那样,也只需要几秒钟。 当我从查询插入到表时,它需要花费几分钟的时间-大约每插入1000条记录需要一分钟。 源查询本身仅作为选择查询运行时,可能需要1-2秒。查询是否针对插入的每个记录运行?我希望它会在整个数据集中运行一次。还是有其他原因导致该函数与从另一个表插入“平面”数

  • 问题内容: 在下表中,如何仅根据登录列获取的 最新记录 ,而不是所有3条记录? 问题答案: 使用按ID分组的汇总。这将列出每个最新的。 要获取完整的单个记录,请对仅返回每个ID 的子查询执行。