基于2个外键列插入或更新

时间:2015-11-03 22:03:23

标签: mysql

我有一个存储userSettings的表。这些设置是从具有默认值的设置表和用户表生成的。如果用户设置了某些内容(或更改了默认值),我会在userSettings表中存储针对settingID和userID的自定义值。

感谢此问题Joining 3 MySQL tables in to 1 query

的帮助,我得到了设置

现在我要做的是插入一条记录(如果它不存在)或者更新它是否存在。

我知道我可以使用ON DUPLICATE KEY但是我想测试针对2个外键的userID和settingID,而不是针对userSettings表进行测试,而userSettingID是userSettings表的主要自动增量ID。如果匹配更新,如果没有匹配插入。

用户最多可能有20个自定义设置,因此我无法在userID列上设置UNIQUE。

由于

1 个答案:

答案 0 :(得分:1)

这是MySQL唯一的功能,但您可以使用REPLACE INTO而不是INSERT INTO。如果您在多个字段(userID,settingsID)上添加了UNIQUE索引,则查询将根据您的需要自动执行。

[编辑]

从手册:

  

REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中   table与PRIMARY KEY或UNIQUE的新行具有相同的值   index,在插入新行之前删除旧行

向多个字段添加索引(来自How do I specify unique constraint for multiple columns in MySQL?):

ALTER TABLE `tbl` ADD UNIQUE `unique_index`(`userID`, `settingsID`);