我有这个表,其中包含以下列:
id
userid
app
field
value
列“field”和“app”与“userid”一起是唯一的。因此,用户将始终只有一行具有相同的“app”和“field”值。但是它们将有多于一行,只有“app”值相同或只是“field”值相同。并且总会有多行具有相同的“用户ID”。
我不知道我该怎么办,并在多个键上插入或更新。我无法在mysql中将它们设置为唯一,因为该值可用于其他“userid”行或具有不同“app”或“field”值的其他行。
这是可能的,还是我必须首先进行SELECT检查是否存在“userid”,“app”和“field”匹配我要插入或更新的行。
此外,我尝试使用单个查询插入/更新超过1行。
答案 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)
你应该确保所需的字段与'和'并且所有都括在括号中