现在我有一个带有自动增量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'有重复的条目。 那么我该如何解决这个问题?
答案 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对此主题有更多想法。