好的,所以我要说我在我的一个表中做了一个mysql INSERT
,该表的列 item_id
设置为 autoincrement
和 primary key
.
How do I get the query to output the value of the newly generated primary key item_id in the same query?
目前我正在运行第二个查询以检索id但这似乎不是一个好的做法,考虑到这可能会产生错误的结果......
如果这是不可能的,那么确保我检索正确ID的最佳做法是什么?
7 回答
您需要使用
LAST_INSERT_ID()
函数:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id例如:
这将返回您插入的最后一行的
PRIMARY KEY
值:因此
LAST_INSERT_ID()
返回的值是每个用户,不受其他用户在服务器上运行的其他查询的影响 .BEWARE !! of "LAST_INSERT_ID()" 如果尝试在PHP中返回此主键值 .
我知道这个线程没有被标记为php,但是对于任何遇到这个答案的人来说,希望使用标准的mysql_query调用从PHP脚本插件返回一个MySQL插入ID - 它不会工作,并且在没有捕获SQL错误的情况下不明显 .
较新的mysqli支持多个查询 - 其中 LAST_INSERT_ID() 实际上是来自原始查询的第二个查询 .
IMO单独的SELECT用于标识最后一个主键比可选的mysql_insert_id()函数更安全,该函数返回从先前的INSERT操作生成的AUTO_INCREMENT ID .
来自
LAST_INSERT_ID()
文档:也就是说如果你同时对脚本有两个单独的请求,他们就赢了't affect each others'
LAST_INSERT_ID()
(除非你使用的是持久连接) .在这里你要找的!!!
这是
SQL Server
中使用的SCOPE_IDENTITY()
函数的最佳替代方法 .您还需要记住,只有在
Insert
查询之后触发了Last_INSERT_ID()
时,这才有效 . 即查询返回在架构中插入的id . 您无法获取特定表的最后插入ID .欲了解更多详情,请浏览链接The equivalent of SQLServer function SCOPE_IDENTITY() in mySQL?
如果在插入行之前需要该值:
您可以在插入中使用它:
您将在查询结果中收到以下参数:
insertId
正是您所需要的 .(的NodeJS MySQL的)
只需使用“$ last_id = mysqli_insert_id($ conn);”