我有一个名为word_frequency的innodb表,有4列
我尝试了多个不同的查询但似乎无法正确执行upsert。我只想在USER_ID和WORD都已存在时更新表,否则新行。但它只是不断创建具有自动增量ID的新行。
INSERT INTO word_frequency (USER_ID, WORD, FREQUENCY)
VALUES(1, "word", 32)
ON DUPLICATE KEY UPDATE FREQUENCY = FREQUENCY + 27;
我甚至尝试过
INSERT INTO word_frequency (USER_ID, WORD, FREQUENCY)
VALUES(1, "word", 32)
ON DUPLICATE KEY UPDATE ID=LAST_INSERT_ID(ID), FREQUENCY = FREQUENCY + 27;
和
INSERT INTO word_frequency (ID,USER_ID, WORD, FREQUENCY)
VALUES(LAST_INSERT_ID(ID+1),1, "word", 32)
ON DUPLICATE KEY UPDATE ID=LAST_INSERT_ID(ID), FREQUENCY = FREQUENCY + 27;
我在哪里错了?
任何帮助将不胜感激
答案 0 :(得分:1)
您必须在WORD
字段上创建一个唯一索引,如下所示:
CREATE UNIQUE INDEX UQ_WORD ON word_frequency (WORD );
这样,MySQL 知道 WORD
上不允许重复。因此,当INSERT
尝试插入已存在的单词时,将执行查询的UPDATE
部分。