【问题标题】:MySQL: what's the best way to insert if not exists?MySQL:如果不存在,最好的插入方式是什么?
【发布时间】:2012-11-14 12:19:01
【问题描述】:

我知道有很多关于 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:使用重复键 不起作用,因为唯一的主键是“id”

#2:替换 我不想使用 REPLACE,因为我认为这是一种肮脏的方式(每次有人更改他的选项时,主键都会计数)。

#3:MySQL 如果,那么 使用过多的性能,而且似乎也很脏。

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

提前致谢!

【问题讨论】:

    标签: mysql insert conditional where


    【解决方案1】:

    虽然id 是主键(也是唯一的),但您绝对可以在唯一键角色中使用field_iduser_id 的组合。

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

    【讨论】:

      猜你喜欢
      • 2011-07-09
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多