我有一个表设置(很像WordPress usermeta
表),该表设置允许为给定用户存储键和值。
ID UserID MetaKey MetaValue
ID
是主要的自动递增列,UserID
是用户ID的INT
值。
我当前的插入语句如下:
INSERT INTO user_meta (`UserID`, `MetaKey`, `MetaValue`) VALUES
(5, firstkey, firstvalue),
(5, secondkey, secondvalue)
这在插入新值时有效,但是我将如何更新查询,以便如果存在UserID
和MetaKey
值与要插入的值匹配的行,请更新现有的{{1 }}而不是插入新行?
答案 0 :(得分:2)
首先,您需要为UserID和MetaKey组合定义唯一的约束:
ALTER TABLE usermeta ADD CONSTRAINT UserID_MetaKey_combination UNIQUE (UserID, MetaKey);
注意:如果表中已经有非唯一的UserID和MetaKey值组合,则将无法添加约束。
表具有约束后,如果UserID和MetaKey唯一,将插入以下查询,否则将更新找到的组合的MetaValue:
INSERT INTO usermeta (`UserID`, `MetaKey`, `MetaValue`) VALUES
(5, "firstkey", "firstvalue"),
(5, "secondkey", "secondvalue")
ON DUPLICATE KEY UPDATE MetaValue=values(MetaValue)