INSERT INTO ..使用多个键进行DUPLICATE KEY UPDATE

时间:2016-06-27 09:59:08

标签: mysql indexing upsert

我有这个表,其中包含以下列:

id
userid
app
field
value

列“field”和“app”与“userid”一起是唯一的。因此,用户将始终只有一行具有相同的“app”和“field”值。但是它们将有多于一行,只有“app”值相同或只是“field”值相同。并且总会有多行具有相同的“用户ID”。

我不知道我该怎么办,并在多个键上插入或更新。我无法在mysql中将它们设置为唯一,因为该值可用于其他“userid”行或具有不同“app”或“field”值的其他行。

这是可能的,还是我必须首先进行SELECT检查是否存在“userid”,“app”和“field”匹配我要插入或更新的行。

此外,我尝试使用单个查询插入/更新超过1行。

3 个答案:

答案 0 :(得分:3)

首先在(user_id, app, field)上创建一个唯一索引。

ALTER TABLE user_settings
ADD UNIQUE (userid,app,field);

然后使用这样的查询。

INSERT INTO user_settings SET
       -- id = ?,   Do not include this -- you don't have the value
       userid = ?,
        app=?,
        field=?,
        value = ?,
        ON DUPLICATE KEY UPDATE
        value = ?;

答案 1 :(得分:1)

这对我有用......

INSERT INTO table (field, app, userid, value)
           VALUES (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4)
           ON DUPLICATE KEY UPDATE value=VALUES(value);

这可以通过单个查询进行多行

答案 2 :(得分:0)

你可以这样做

update mytable set col1 = @value where (field = @v and app=@v1)

如果你想要三个字段:

 update mytable set col1 = @value where (field = @v and app=@v1 and userid = @v2)

你应该确保所需的字段与'和'并且所有都括在括号中