MySQL - 在ON DUPLICATE KEY的两列上创建一个UNIQUE索引

时间:2009-10-19 23:25:35

标签: sql mysql

我有一个包含4列的表格。我希望能够在创建时插入或更新值列(我不关心索引行ID)。

CREAT TABLE tablename (
 id,   (primary)
 user_id, (index)
 setting_id, (index)
 value  (index)
);

每次我想保存一个值时,我原本打算运行一个“REPLACE INTO ...”查询。但后来我read about the problems而是选择INSERT INTO ...在DUPLICATE KEY UPDATE。

问题是我没有“INSERT INTO ... ON DUPLICATE KEY UPDATE”的单列用于确定这是否是一个新行,或者是否存在需要更新的现有行

所以我想我会使用一个UNIQUE键,它是两列的混合,使这一行变得独一无二(

CREATE UNIQUE INDEX index_name ON table(user_id, setting_id);

但是,我不确定如何从这里前进。在尝试找出具有这两个列值的行时,如何构造查询以检查此新INDEX?

INSERT INTO `tablename` (value, user_id, setting_id) VALUES (1,34,15) ON DUPLICATE KEY UPDATE

:编辑:

通过删除ID主列只留下(setting_id,user_id和& value),我能够在(setting_id,user_id)上创建PRIMARY索引,然后以下查询起作用。 more help here

INSERT INTO tablename (user_id, setting_id, value)
VALUES (42, 1, 12)
ON DUPLICATE KEY UPDATE value = 12

1 个答案:

答案 0 :(得分:8)

你的查询最终会看起来像这样......

INSERT INTO table (value,user_id,setting_id) VALUES (1,34,15)
  ON DUPLICATE KEY UPDATE value = 1, user_id = 34, setting_id = 15;