[英]MySQL: insert data in tables with foreign keys
在MySQL中,我有三個表: projects
, tags
和tags_posts
。
tags_posts
是projects
和tags
之間的表格,其中將project_id
和tag_id
為外鍵。 這樣,我可以輕松地為project_id = x
選擇所有標簽,或為tag_id = y
選擇所有項目。
當然,我想將項目添加到數據庫中。 我了解了START TRANSACTION;
和COMMIT;
這樣查詢將完全執行或完全不執行。 但是我必須使用哪種查詢一次將INSERT
, SELECT
和UPDATE
數據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掛起執行此查詢。 誰能幫助我對這三個表使用正確的查詢INSERT
, UPDATE
或SELECT
?
您必須首先插入父行( projects
和tags
),然后將引用添加到多對多表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.