无法让 UPSERT 在具有自动增量列和 FK 的 MYSQL 上工作

Cannot get UPSERT to work on MYSQL with auto increment column and FK

我有一个名为 word_frequency 的 innodb table,有 4 列

  1. ID - INT (pk) (auto_increment)
  2. USER_ID - 智力 (fk)
  3. 字 - 字符串
  4. 频率 - 整数

我尝试了多个不同的查询,但似乎无法正确执行更新插入。我只想在 USER_ID 和 WORD 都已经存在时更新 table,否则是新行。但它只是不断创建具有自动增量 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;

我哪里错了?

如有任何帮助,我们将不胜感激

您必须像这样在 WORD 字段上创建唯一索引:

CREATE UNIQUE INDEX UQ_WORD ON word_frequency (WORD );

这样 MySQL 知道 WORD不允许重复 。因此,当 INSERT 尝试插入一个已经存在的单词时,将执行查询的 UPDATE 部分。

Demo here