我有一个包含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
答案 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;