Amy*_*lle 216 mysql key insert auto-increment
好的,所以我可以说我在INSERT
我的一个表中做了一个mysql ,而且表中有一个item_id
设置为autoincrement
和的列primary key
.
如何让查询item_id
在同一查询中输出新生成的主键的值?
目前我正在运行第二个查询以检索id但这似乎不是一个好的做法,因为这可能会产生错误的结果......
如果这不可能,那么确保我检索正确ID的最佳做法是什么?
Dun*_*ock 288
您需要使用以下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();
Run Code Online (Sandbox Code Playgroud)
这将返回您插入PRIMARY KEY
的最后一行的值:
生成的ID在每个连接的基础上在服务器中维护.这意味着函数返回给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值.
因此,通过返回的值LAST_INSERT_ID()
是每用户是不会受到影响的,可能在服务器上运行的其他查询其他用户.
Mar*_*OEE 20
谨防 !! 如果尝试在PHP中返回此主键值,则为"LAST_INSERT_ID()".
我知道这个帖子没有被标记为php,但是对于任何遇到这个答案的人来说,希望使用标准的mysql_query调用从PHP脚本插件返回一个MySQL插入ID - 它不会工作,并且不会在没有捕获SQL错误的情况下显而易见.
较新的mysqli支持多个查询 - 其中 LAST_INSERT_ID()实际上是来自原始查询的第二个查询.
IMO单独的SELECT用于标识最后一个主键比可选的mysql_insert_id()函数更安全,该函数返回从先前的INSERT操作生成的AUTO_INCREMENT ID.
Ula*_*lau 20
您需要将 LAST_INSERT_ID() 函数与事务一起使用:
START TRANSACTION;
INSERT INTO dog (name, created_by, updated_by) VALUES ('name', 'migration', 'migration');
SELECT LAST_INSERT_ID();
COMMIT;
Run Code Online (Sandbox Code Playgroud)
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
该函数将返回表中最后插入的主键。
Exp*_*lls 16
从LAST_INSERT_ID()
文档:
生成的ID在每个连接的基础上在服务器中维护
也就是说,如果您同时对脚本提出两个单独的请求,则它们不会影响彼此LAST_INSERT_ID()
(除非您使用的是持久连接).
PVR*_*PVR 14
在这里你要找的!!!
select LAST_INSERT_ID()
Run Code Online (Sandbox Code Playgroud)
这是SCOPE_IDENTITY()
使用函数的最佳选择SQL Server
.
您还需要记住,这只有Last_INSERT_ID()
在您的Insert
查询后触发时才会起作用.即查询返回模式中插入的id.您无法获取特定表的最后插入ID.
有关更多详细信息,请通过链接在mySQL中等效于SQLServer函数SCOPE_IDENTITY()?
Cur*_*wer 13
只需使用:
$last_id = mysqli_insert_id($conn);
Run Code Online (Sandbox Code Playgroud)
MES*_*ehr 11
您将在查询结果中收到以下参数:
"fieldCount": 0,
"affectedRows": 1,
"insertId": 66,
"serverStatus": 2,
"warningCount": 1,
"message": "",
"protocol41": true,
"changedRows": 0
Run Code Online (Sandbox Code Playgroud)
这insertId
正是您所需要的。
(NodeJS-mySql)
moj*_*ken 10
如果在 python 中使用pymysql
,则从游标中可以使用cursor.lastrowid
.
它是DB API 标准中的文档扩展PEP-249
,也适用于其他 Python MySQL 实现。
小智 6
如果在插入行之前需要该值:
CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))
RETURNS BIGINT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE Value BIGINT;
SELECT
AUTO_INCREMENT INTO Value
FROM
information_schema.tables
WHERE
table_name = TableName AND
table_schema = DATABASE();
RETURN Value;
END
Run Code Online (Sandbox Code Playgroud)
您可以在插入中使用它:
INSERT INTO
document (Code, Title, Body)
VALUES (
sha1( concat (convert ( now() , char), ' ', getAutoincrementalNextval ('document') ) ),
'Title',
'Body'
);
Run Code Online (Sandbox Code Playgroud)