0

将关键字添加到 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;

不断报错。

进行这种多次插入的最佳方法是什么?

4

2 回答 2

1

你可以这样做:

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-04T22:32:39.880 回答
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,但这样一来,您就不能拥有具有相同关键字的两篇文章,这看起来很奇怪,并且可能导致不良行为。

于 2013-02-04T22:37:17.553 回答