2009-10-19 189 views
5

我有一个包含4列的表。我希望能够在创建时插入或更新值列(我不关心索引行ID)。MySQL - 在ON DUPLICATE KEY的两列上创建一个UNIQUE索引

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

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

问题是,我没有单列“INSERT INTO ... ON DUPLICATE KEY UPDATE”来判断这是一个新行还是存在一个需要存在的行更新。

所以我想我会使用一个唯一的密钥是由该行唯一的(

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

但是,我不知道应该怎么推进,如何做两列的组合构建我的查询,检查,试图找出一排已经与这两个字段值时存在这种新的索引

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

:编辑:

通过删除ID主列LEA ving only(setting_id,user_id,&值)我能够在(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 

回答

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; 
相关问题