MySQL:插入或更新(如果已存在)

时间:2018-07-23 17:33:41

标签: php mysql

我有一个表设置(很像WordPress usermeta表),该表设置允许为给定用户存储键和值。

ID UserID MetaKey MetaValue

ID是主要的自动递增列,UserID是用户ID的INT值。

我当前的插入语句如下:

INSERT INTO user_meta (`UserID`, `MetaKey`, `MetaValue`) VALUES
    (5, firstkey, firstvalue),
    (5, secondkey, secondvalue)

这在插入新值时有效,但是我将如何更新查询,以便如果存在UserIDMetaKey值与要插入的值匹配的行,请更新现有的{{1 }}而不是插入新行?

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)