向db添加关键字。 我有3张桌子。
Articles
-ArticleID PK
-ArticleTitle
-ArticleBody
Keywords
-KeywordID PK
-Keyword UNIQUE
Keyword_Article
-KeywordID PK
-ArticleID
试图找出如何尽可能高效地更新关键字表。 我现在所拥有的只是SQLBUDDY。
我取得了成功
INSERT INTO Keywords (KeywordID, Keyword)
VALUES (NULL,'test');
INSERT INTO Keyword_Article (KeywordID, ArticleID)
VALUES ('LAST_INSERT_ID()','2222');
但是当我遇到一个已存在的关键字时,这显然不起作用。 我猜测需要一个if / else / then或者还有其他方法可以做到这一点。 我已经阅读了有关存储过程的信息,这些存储过程可以帮助阻止第二个表填充,如果第一个表失败但我似乎无法让它们在SQLBUDDY中工作。
例如
BEGIN
INSERT INTO Keywords (KeywordID, Keyword)
VALUES (NULL,'test')
INSERT INTO Keyword_Article (KeywordID, ArticleID)
VALUES ('LAST_INSERT_ID()','2222');
COMMIT;
不断出错。
进行这种多重插入的最佳方法是什么?
答案 0 :(得分:1)
您可以这样做:
INSERT IGNORE INTO Keywords (Keyword)
VALUES ('test')
INSERT INTO Keyword_Article (KeywordID, ArticleID)
VALUES ((SELECT KeywordID FROM Keywords WHERE Keyword = 'test'),'2222');
这会尝试插入一个新关键字,但如果它已经存在则忽略它。第二个查询将始终找到KeywordID,无论它是否是新的。
答案 1 :(得分:1)
你可以这样做:
-- Forces Keyword to be unique
CREATE UNIQUE INDEX Keywords_ndx ON Keywords(Keyword);
然后:
-- Inserts keyword into Keywords, failing silently if duplicated
INSERT IGNORE INTO `Keywords` (`Keyword`) VALUES ('test');
-- Retrieves that keyword's ID, be it newly inserted or duplicated.
INSERT IGNORE INTO Keyword_Article (KeywordID, ArticleID)
SELECT KeywordID, 2222 FROM Keywords WHERE Keyword='test';
Keyword_Article
将两个字段都作为主键。您只将KeywordID声明为PK,但是这样,您不能有两篇具有相同关键字的文章,这看起来很奇怪,可能会导致不良行为。