gpt4 book ai didi

mysql - 如何将多行插入到一个表中,然后使用自动递增的 ID 插入到另一个表中?数据库

转载 作者:搜寻专家 更新时间:2023-10-30 22:01:34 25 4
gpt4 key购买 nike

所以我有两个通过键“skillid”链接的表:

skills
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| skillid | int(11) | NO | PRI | NULL | auto_increment |
| skillname | varchar(30) | NO | | NULL | |
+-----------+-------------+------+-----+---------+----------------+

students_skills
+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| ssid | int(11) | NO | PRI | NULL | auto_increment |
| studentid | int(11) | NO | MUL | NULL | |
| skillid | int(11) | NO | MUL | NULL | |
+-----------+---------+------+-----+---------+----------------+

我正在尝试将多行插入到表 skills 中,然后根据创建的 ID 将这些插入到 student_skills 中。我一直在研究使用 LAST_INSERT_ID() 函数:

INSERT INTO skills (skillid , skillname)
VALUES(NULL,'being grateful for help'); # generate ID by inserting NULL
INSERT INTO students_skills (ssid, studentid, skillid)
VALUES(LAST_INSERT_ID(),'1', '2'); # use ID in second table

但我不知道如何在一个 mysql 表中一次对多行执行此操作。当我简单地为每一行复制上面的 4 行时,我得到一个错误。

ERROR: #1452 - Cannot add or update a child row: a foreign key constraint fails (empology.students_skills, CONSTRAINT students_skills_ibfk_2 FOREIGN KEY (skillid) REFERENCES skills (skillid))

我是否在正确的路线上?我也研究了连接,但这种方法对我来说更有意义。

感谢您提供任何帮助或有用的链接。

最佳答案

您必须确保使用多行插入语法,以便 LAST_INSERT_ID() 保持一致,即使您正在自动递增另一列:

INSERT INTO skills VALUES (NULL, 'test');

假设生成的 skillid1,那么您可以:

INSERT INTO student_skills VALUES
(NULL, 1, LAST_INSERT_ID()),
(NULL, 2, LAST_INSERT_ID()),
(NULL, 3, LAST_INSERT_ID()),
(NULL, 4, LAST_INSERT_ID());

LAST_INSERT_ID() 返回的值将在所有四行中始终保持相同 (1)。

但是,如果您将多个插入作为独立语句执行,LAST_INSERT_ID() 将更改,因为它将包含每个插入生成的自动递增值:

INSERT INTO student_skills VALUES (NULL, 1, LAST_INSERT_ID());
INSERT INTO student_skills VALUES (NULL, 2, LAST_INSERT_ID());
INSERT INTO student_skills VALUES (NULL, 3, LAST_INSERT_ID());
INSERT INTO student_skills VALUES (NULL, 4, LAST_INSERT_ID());

其中 LAST_INSERT_ID() 是前一个插入的生成 ID。


看看这个SQLFiddle Demo

关于mysql - 如何将多行插入到一个表中,然后使用自动递增的 ID 插入到另一个表中?数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11801530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com