LAST_INSERT_ID() MySQL
我有一个 MySQL 问题,我认为这一定很简单。当我运行以下 MySql 查询时,我需要从 table1 返回 LAST INSERTED ID:
INSERT INTO table1 (title,userid) VALUES ('test',1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT LAST_INSERT_ID();
正如您所理解的,当前代码将只返回 table2 而不是 table1 的 LAST INSERT ID,即使我插入,如何从 table1 获取 id进入table2之间?
I have a MySQL question that I think must be quite easy. I need to return the LAST INSERTED ID from table1 when I run the following MySql query:
INSERT INTO table1 (title,userid) VALUES ('test',1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT LAST_INSERT_ID();
As you can understand the current code will just return the LAST INSERT ID of table2 instead of table1, how can I get the id from table1 even if I insert into table2 between?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
您可以将最后一个插入 id 存储在变量中:
或者从 table1 获取最大 id(编辑:警告。请参阅 Rob Starling 的注释中有关使用最大 id 时竞争条件可能出现的错误的注释)
(警告:正如 Rob Starling 指出的那样)在评论中)
You could store the last insert id in a variable :
Or get the max id from table1 (EDIT: Warning. See note in comments from Rob Starling about possible errors from race conditions when using the max id)
(Warning: as Rob Starling points out in the comments)
由于您实际上将之前的 LAST_INSERT_ID() 存储到第二个表中,因此您可以从那里获取它:
Since you actually stored the previous LAST_INSERT_ID() into the second table, you can get it from there:
这使您能够将一行插入到两个不同的表中,并创建对两个表的引用。
This enables you to insert a row into 2 different tables and creates a reference to both tables too.
我在 bash 中遇到了同样的问题,我正在做这样的事情:
效果很好:-)但是
不起作用。因为在第一个命令之后,shell将从mysql注销并再次登录以执行第二个命令,然后变量@last_insert_id不再设置。
我的解决方案是:
也许有人正在寻找 bash 的解决方案:-)
I had the same problem in bash and i'm doing something like this:
which works fine:-) But
don't work. Because after the first command, the shell will be logged out from mysql and logged in again for the second command, and then the variable @last_insert_id isn't set anymore.
My solution is:
Maybe someone is searching for a solution an bash :-)
我们只有一个人输入记录,因此我在插入后立即执行以下查询:
这将从数据库中检索最后一个 id。
We only have one person entering records, so I execute the following query immediately following the insert:
This retrieves the last id from the database.
是否可以将last_id_in_table1变量保存到php变量中以便稍后使用?
有了这个last_id,我需要用这个last_id附加另一个表中的一些记录,所以我需要:
1)执行INSERT并获取last_id_in_table1
2)对于另一个表中任何不确定的行,使用插入中生成的last_id_insert更新这些行。
It would be possible to save the last_id_in_table1 variable into a php variable to use it later?
With this last_id I need to attach some records in another table with this last_id, so I need:
1) Do an INSERT and get the last_id_in_table1
2) For any indeterminated rows in another table, UPDATING these rows with the last_id_insert generated in the insert.
而不是这个
LAST_INSERT_ID()
尝试使用这个
Instead of this
LAST_INSERT_ID()
try to use this one
对于没有 InnoDB 解决方案:您可以使用过程
不要忘记使用 ; 设置存储过程的分隔符
并且您可以使用它......
For no InnoDB solution: you can use a procedure
don't forgot to set the delimiter for storing the procedure with ;
And you can use it...
在触发器 BEFORE_INSERT 中,这对我有用:
或者在简单的选择中:
如果需要,请删除注释
/*-1*/
并在其他情况下进行测试。为了多次使用,我可以编写一个函数。这很容易。
In trigger BEFORE_INSERT this working for me:
Or in simple select:
If you want, remove the comment
/*-1*/
and test in other cases.For multiple use, I can write a function. It's easy.
对于最后一个和倒数第二个:
For last and second last:
我们还可以使用 $conn->insert_id;
// 创建连接
We could also use $conn->insert_id;
// Create connection
我的代码对我不起作用。任何想法来恢复我最后插入的ID,这是我的代码,我是新开发的,我不太了解
我在查询中出现错误,并且我不知道如何在 $ session-> 行中发送打印msg('s', "产品添加成功。进行成本配置".LAST_INSERT_ID());
已验证数据库的连接和字段是否正确。
My code does not work for me. Any idea to recover the id of my last insert this is my code I am new developing and I do not know much
I GOT ERROR IN THE QUERY AND I DON'T KNOW HOW TO SEND PRINT IN THE LINE OF $ session-> msg ('s', "Product added successfully. Make cost configuration". LAST_INSERT_ID ());
ALREADY VERIFY AND IT IS CORRECT THE CONNECTION AND THE FIELDS OF THE DATABASE.
只是为了添加 Rodrigo 帖子,您可以使用 SELECT MAX(id) FROM table1; 而不是查询中的 LAST_INSERT_ID(),但必须使用 (),
Just to add for Rodrigo post, instead of LAST_INSERT_ID() in query you can use SELECT MAX(id) FROM table1;, but you must use (),
如果您需要在查询后从 mysql 获取最后一个自动增量 id 而无需再次查询,请输入您的代码:
If you need to have from mysql, after your query, the last auto-incremental id without another query, put in your code: