gpt4 book ai didi

MySQL:在带有外键的表中插入数据

转载 作者:行者123 更新时间:2023-11-29 00:21:08 25 4
gpt4 key购买 nike

在 MySQL 中,我有三个表:projectstagstags_posts

tags_postsprojectstags 之间的一个表,包含 project_idtag_id 作为外键。这样一来,我就可以轻松地为 project_id = x 选择所有标签,或者为 tag_id = y 选择所有项目。

当然,我想将项目添加到数据库中。我已经了解了 START TRANSACTION;COMMIT; 以便可以完全执行或根本不执行查询。但是我必须使用什么查询才能同时向这三个表INSERTSELECTUPDATE 数据?

我考虑过使用:INSERT INTO projects([column-1], [column-2], [column-N]) VALUES([value-1], [value-2], [value-N]);

INSERT INTO tags_posts(tag_id, project_id) VALUES(1, LAST_INSERT_ID());

INSERT INTO tags(tag_id, tag_name) VALUES(LAST_INSERT_ID(), 'php');

MySQL Workbench 给出错误 1452:外键约束失败。 PHPMyAdmin 挂起执行此查询。谁能帮助我对这三个表使用正确的查询来INSERTUPDATESELECTER Diagram of the three tables mentioned

最佳答案

您必须先插入父行(projectstags),然后添加对多对多表tags_posts 的引用。

你的代码可能是这样的

START TRANSACTION;
-- Add a project
INSERT INTO projects(title, description, datum) VALUES ('title1', 'description1', CURDATE());
SET @project_id = LAST_INSERT_ID();
-- Add a tag
INSERT INTO tags (tag_name) VALUES ('tag1');
SET @tag_id = LAST_INSERT_ID();
-- Now add a tag to the project
INSERT INTO tags_posts (tag_id, project_id) VALUES (@tag_id, @project_id);
COMMIT;

这是 SQLFiddle 演示


如果你需要添加一个标签,然后用这个标签添加几个项目你可以这样做

START TRANSACTION;
INSERT INTO tags (tag_name) VALUES ('tag1');
SET @tag_id = LAST_INSERT_ID();

INSERT INTO projects(title, description, datum) VALUES ('title1', 'description1', CURDATE());
INSERT INTO tags_posts (tag_id, project_id) VALUES (@tag_id, LAST_INSERT_ID());

INSERT INTO projects(title, description, datum) VALUES ('title2', 'description2', CURDATE());
INSERT INTO tags_posts (tag_id, project_id) VALUES (@tag_id, LAST_INSERT_ID());
COMMIT;

这是 SQLFiddle 演示

关于MySQL:在带有外键的表中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080822/

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