使用自动增量列和FK无法使UPSERT在MYSQL上工作

时间:2016-02-14 16:14:48

标签: php mysql database relational-database innodb

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

  1. ID - INT(pk)(auto_increment)
  2. USER_ID - INT(fk)
  3. WORD - STRING
  4. FREQUENCY - INT
  5. 我尝试了多个不同的查询但似乎无法正确执行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;
    

    我在哪里错了?

    任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您必须在WORD字段上创建一个唯一索引,如下所示:

CREATE UNIQUE INDEX UQ_WORD ON word_frequency (WORD );

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

Demo here