我有一张有四列的桌子。我希望能够在创建时插入或更新值列(我不关心索引行ID)。
CREAT TABLE tablename (
id, (primary)
user_id, (index)
setting_id, (index)
value (index)
);
最初,每当我想保存一个值时,我都会运行一个“replacetinto…”查询。但是我
read about the problems
而是选择了一个插入…在重复的密钥更新时。
问题是我没有“insert into…”的单列。在“重复键更新”中,用于确定这是新行还是需要更新现有行。
所以我想我会使用一个唯一的键,它是两列的混合,使这一行具有唯一性。(
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主列,只留下(设置_id、用户_id和值),我可以在(设置_id、用户_id)上创建主索引,然后执行以下查询。
more help here
.
INSERT INTO tablename (user_id, setting_id, value)
VALUES (42, 1, 12)
ON DUPLICATE KEY UPDATE value = 12