2013-12-19 24 views
1

我有一个用户元数据表,我存储一些额外的值。我需要:插入或如果列组合存在更新

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

OR

B)如果已经是USER_ID/meta_type组合则刚刚更新它的值

重要注意:

我发现MySQL的“ON DUPLICATE KEY UPDATE” - 但从我从手册中了解,它似乎只检查PRIMARY KEY所以曲线注意是:

A)有没有办法做一些像“在DUPLICATE COLUMN1和COLUMN2更新值”?

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

C)难道我明白ON DUPLICATE KEY UPDATE手册错误?

+2

不,它不检查主键。任何独特的索引将起作用。 – Barmar

+3

而且您可以在多个列上有唯一的索引。 – Barmar

+0

是的,但B。你可以有复合主键。 'CREATE TABLE t(a INTEGER,b INTEGER,PRIMARY KEY(a,b))' – Amadan

回答

0

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

INSERT INTO表(A,B,C)VALUES(1,2,3) ON DUPLICATE KEY UPDATE c = c + 1;

等效更新查询是如下,

UPDATE SET表C = C + 1其中a = 1;

如果a和b列是唯一的,相当于更新查询将是,

UPDATE SET表C = C + 1其中a = 1 OR B = 2 LIMIT 1;

相关问题