我有一个MySQL问题,我想这一定很简单.运行以下MySql查询时,我需要返回表1中最后插入的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();

正如您所理解的,当前代码只返回表2的最后一个插入ID,而不是表1,即使我在表2之间插入,如何从表1中获取ID?

推荐答案

可以将最后一个插入id存储在变量中:

INSERT INTO table1 (title,userid) VALUES ('test', 1); 
SET @last_id_in_table1 = LAST_INSERT_ID();
INSERT INTO table2 (parentid,otherid,userid) VALUES (@last_id_in_table1, 4, 1);    

或者从表1中获取最大id(编辑:警告.请参阅Rob Starling comments 中关于使用最大id时可能出现的比赛条件错误的注释)

INSERT INTO table1 (title,userid) VALUES ('test', 1); 
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(), 4, 1); 
SELECT MAX(id) FROM table1;  

(警告:正如Rob Starling在 comments 中指出的那样)

Mysql相关问答推荐

在MySQL中存储一条帖子的点赞数量

如何在产品查询中插入GROUP_CONCAT?

如何在Sequelize中创建限制查询?

如果WHERE语句包含所有列,唯一键顺序是否重要?

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

如何使用等于、喜欢和不等于在 json 字段上编写查询?

如何优化使用多个 LEFT JOIN 和 GROUP BY 子句的慢速 MySQL 查询?

如何在更新表单中使用 group by?在 SQL 中

此更新查询是否有任何可能的重写选项?

MySQL 1292 截断不正确的日期时间值:'2020-09-11T08:32-50Z'

使用 JOIN 计算列中的所有值

MySQL过滤食谱上的多对多 - 成分表

具有别名主机的 ssh 反向 mysql tunel

如何在 SQL 的计算列中显示小数点后两位?

MySql,将日期和时间列组合成时间戳

mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

在连接条件上使用 IS NULL 或 IS NOT NULL - 理论问题

如何将 MySQL 查询结果存储在另一个表中?

如何将具有相同列值的mysql行分组为一行?

什么是mysql的BETWEEN性能超过..?