表更新mysql上有多个唯一条目

时间:2012-12-09 23:34:30

标签: mysql sql-update unique

现在我有一个带有自动增量ID号,名称和定义的表 我正在使用

更新表中包含来自另一个表的值
INSERT INTO words(id, word, definition) SELECT id, word, definition FROM temp 
ON DUPLICATE KEY UPDATE words.word = temp.word, words.definition=temp.definition;

表temp具有与我正在使用的表完全相同的列布局,并且它工作正常,除非我从temp中间删除一个条目然后更新我的主表。 例如,

temp
id  word definition
1   bob   is a cat
2   sam   is a dog
3   doug  is a monk
4   croe  is a bird

表main设置为 然后我从temp

中删除第2行
temp
    id  word definition
    1   bob   is a cat
    2   doug  is a monk
    3   croe  is a bird

然后更新主表

main
id  word definition
1   bob   is a cat
2   sam   is a dog
3   croe  is a bird
4   croe  is a bird

因为temp现在只有3行,但是主HAD 4,第4行不会被删除。我试图通过使单词成为一个独特的列来解决这个问题,现在我得到错误,即关键字'word'有重复的条目。 那么我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

来自MySQL manual

  

通常,您应该尽量避免使用ON DUPLICATE KEY UPDATE   具有多个唯一索引的表的子句。

所以,你可以做的是让你的主键word,并摆脱id列。这应该是诀窍:))

您的查询将变为

INSERT INTO words(word, definition) SELECT word, definition FROM temp 
ON DUPLICATE KEY UPDATE words.word = temp.word, words.definition=temp.definition;

如果你需要任意排序,我会创建一个额外的表

CREATE TABLE word_order (VARCHAR(30) PRIMARY KEY, sort_order INT)

然后当您运行查询时

SELECT words.word,
       words.definition
FROM words
JOIN word_order
ON words.word = word_order.word
ORDER BY word_order.sort_order

您的INSERTS变得有点复杂,但您必须运行多个插入。请参阅sql - insert into multiple tables in one query

此外,CodeProject article对此主题有更多想法。