MySQL——插入到一个表中,并获取该表的ID以插入到另一个表——所有这些都在一个查询中



我有一个exercise_logs表,其中包含以下列:

user_id | exercise_name | mood_log_id | weight_log_id | stretch_log_id

我有三个表(mood_logsweight_logsstretch_logs(,它们的主键存储在exercise_logs的最后三列中。

这些是我的mood_logs表的列:

id | mood_scale


所以我想创建一个新的mood_logs条目,并使用其中的id,并将其存储在exercise_log中。但我想在一个查询中完成所有操作。

以下是我迄今为止尝试的内容:

INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`)
values('Breathing', 190, (INSERT INTO `mood_logs` (`mood_scale`)
values(9); LAST_INSERT_ID()))

但这并不奏效。

有可能在一个查询中实现这一点吗?

非常感谢。

你可以试试这个首次查询插入mood_logs

INSERT INTO `mood_logs` (`mood_scale`)
values(9);

第二次查询插入exercise_logs

INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`)
values('Breathing', 190, (SELECT `mood_scale` FROM `mood_logs` WHERE `mood_scale` = 9))

您首先需要INSERTmood_logs中的一行。

由于最新插入的id来自上述语句。

您可以直接在第二个insert语句中使用last_insert_id()

INSERT INTO `mood_logs` (`mood_scale`) values (9);
INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`) values('Breathing', 190, last_insert_id());

这是假设您是唯一使用数据库的人。如果其他人在您使用last_insert_id()之前使用了INSERT语句,那么id可能等于最新插入语句的任何id。

还可以使用变量来存储last_insert_id()

INSERT INTO `mood_logs` (`mood_scale`) values (9);
SET @arbitraryVariableName = last_insert_id();
INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`) values('Breathing', 190, @arbitraryVariableName);

最新更新