0

我知道有很多关于 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 伪代码:

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, THEN 使用过多的性能并且看起来也很脏。

你会选择什么样的解决方案,为什么?我猜#1是最好的,但我无法使用它。

提前致谢!

4

1 回答 1

1

虽然id是主键(也是唯一的),但您肯定会使用 和 的组合field_id作为user_id唯一键角色。

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

于 2012-11-26T23:13:11.943 回答