无法让 UPSERT 在具有自动增量列和 FK 的 MYSQL 上工作
Cannot get UPSERT to work on MYSQL with auto increment column and FK
我有一个名为 word_frequency 的 innodb table,有 4 列
- ID - INT (pk) (auto_increment)
- USER_ID - 智力 (fk)
- 字 - 字符串
- 频率 - 整数
我尝试了多个不同的查询,但似乎无法正确执行更新插入。我只想在 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
部分。
我有一个名为 word_frequency 的 innodb table,有 4 列
- ID - INT (pk) (auto_increment)
- USER_ID - 智力 (fk)
- 字 - 字符串
- 频率 - 整数
我尝试了多个不同的查询,但似乎无法正确执行更新插入。我只想在 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
部分。