INSERT INTO .. ON DUPLICATE KEY UPDATE with multiple keys

INSERT INTO .. ON DUPLICATE KEY UPDATE with multiple keys

我有这个 table 包含以下列:

id
userid
app
field
value

列 "field" 和 "app" 对于 "userid" 是唯一的。因此,用户将始终只有 1 行具有相同的 "app" 和 "field" 值。但是他们将有不止一行 "app" 值相同或 "field" 值相同。而且总是会有多行具有相同的 "userid".

我不确定如何插入或更新多个键。我无法在 mysql 中将它们设置为唯一,因为该值可用于其他 "userid" 行或具有不同 "app" 或 "field" 值的其他行。

这可能吗,或者我必须先做一个 SELECT 来检查是否存在 "userid"、"app" 和 "field" 匹配我的行想要插入或更新。

此外,我正在尝试通过单个查询 insert/update 多于 1 行。

你可以做到

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)

您应该确保所需的字段与 'and' 连接并且全部包含在方括号中

首先在 (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 = ?;

这对我有用...

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);

这可以通过单个查询处理多行