簡體   English   中英

MySQL:使用外鍵將數據插入表中

[英]MySQL: insert data in tables with foreign keys

在MySQL中,我有三個表: projectstagstags_posts

tags_postsprojectstags之間的表格,其中將project_idtag_id為外鍵。 這樣,我可以輕松地為project_id = x選擇所有標簽,或為tag_id = y選擇所有項目。

當然,我想將項目添加到數據庫中。 我了解了START TRANSACTION; COMMIT; 這樣查詢將完全執行或完全不執行。 但是我必須使用哪種查詢一次將INSERTSELECTUPDATE數據INSERT這三個表?

我已經考慮過使用: 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掛起執行此查詢。 誰能幫助我對這三個表使用正確的查詢INSERTUPDATESELECT 提到的三個表的ER圖

您必須首先插入父行( 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演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM