INSERT或列组合是否存在UPDATE

时间:2013-12-19 02:06:45

标签: php mysql sql

我有一个用户元数据表,我存储了一些额外的值。我需要:

A)插入新的user_id / meta_type组合+值

OR

B)如果已经有user_id / meta_type组合,那么只需更新其值

重要提示:

我发现了MySQL的“ON DUPLICATE KEY UPDATE” - 但是根据我从手册中的理解,它似乎只检查PRIMARY KEY所以问题是:

A)有没有办法做“ON DUPLICATE COLUMN1和COLUMN2 UPDATE值”?

B)MySQL InnoDB是否可以在多个列上创建PRIMARY KEY?    
(例如meta_id + user_id + meta_type将是PRIMARY KEY

C)我是否理解ON DUPLICATE KEY UPDATE手册错了?

1 个答案:

答案 0 :(得分:0)

如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则MySQL将执行旧行的UPDATE。例如,如果列a声明为UNIQUE并包含值1,则以下两个语句具有类似的效果:

  

INSERT INTO表(a,b,c)VALUES(1,2,3)     ON DUPLICATE KEY UPDATE c = c + 1;

等效更新查询如下,

  

UPDATE表SET c = c + 1 WHERE a = 1;

如果a和b列是唯一的,则等效的更新查询将是

  

UPDATE表SET c = c + 1 WHERE a = 1 OR b = 2 LIMIT 1;