MySQL:如果不存在,最好的插入方式是什么?

时间:2012-11-26 23:08:16

标签: mysql insert conditional where

我知道INSERT / UPDATE有很多线程,但是我找不到解决问题的方法。

我有两个表来管理选项:

# table 1: option_fields
id | label | type | default

# table 2: option_values
id | field_id | user_id | value

注意:field_id和user_id应该是外键,但它们不是。

如果条目不存在,我想插入option_values,pseudeo代码:

IF (field_id != 1 AND user_id != 2):
    INSERT 
      INTO option_values (field_id, user_id, value) 
    VALUES (1, 2, "text")
ELSE:
    UPDATE option_values
       SET value = "text"
     WHERE field_id = 1 AND user_id = 2
ENDIF;

我知道的方式:

#1:ON DUPLICATE KEY 不起作用,因为唯一的主键是“id”

#2:REPLACE 我不想使用REPLACE因为我认为它是一种肮脏的方式(每当有人改变他的选择时,主键就会计算在内)。

#3:MySQL IF,然后 使用太多性能并且看起来也很脏。

您会选择什么样的解决方案?为什么?我猜#1是最好的,但我不可能使用它。

提前致谢!

1 个答案:

答案 0 :(得分:1)

虽然id是主要(且唯一唯一)密钥,但您明确地使用field_iduser_id的组合作为唯一关键角色。

这表明,最干净的解决方案是在(field_id, user_id)上创建一个唯一键并继续ON DUPLICATE KEY UPDATE