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);
这可以通过单个查询处理多行
我有这个 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);
这可以通过单个查询处理多行