mysql:如果已经存在,则插入或更新

sqougxex  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(282)

我有一个表设置(很像wordpress) usermeta 表),允许为给定用户存储键和值。
ID UserID MetaKey MetaValue ID 是主列,自动递增列, UserID 是一个 INT 用户id的值。
我当前的insert语句如下所示:

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

这在插入新值时起作用,但是如何更新查询,以便如果存在 UserID 以及 MetaKey 如果值与要插入的值匹配,则更新现有值 MetaValue 而不是插入新行?

dtcbnfnu

dtcbnfnu1#

首先,您需要为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)

相关问题