向db添加关键字。我有三张桌子。
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;做这种多重插入的最好方法是什么?
发布于 2013-02-05 06:32:40
你可以这样做:
INSERT IGNORE INTO Keywords (Keyword)
VALUES ('test')
INSERT INTO Keyword_Article (KeywordID, ArticleID)
VALUES ((SELECT KeywordID FROM Keywords WHERE Keyword = 'test'),'2222');这将尝试插入一个新关键字,但如果该关键字已经存在,则将其忽略。第二个查询将始终找到KeywordID,无论它是新的还是不新的。
发布于 2013-02-05 06:37:18
你可以这样做:
-- 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,但这样,您就不能有两篇具有相同关键字的文章,这看起来很奇怪,可能会导致不受欢迎的行为。
https://stackoverflow.com/questions/14696857
复制相似问题