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

标签 mysql insert conditional-statements where-clause

我知道有很多关于 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 IF, THEN 使用太多性能并且看起来也很脏。

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

提前致谢!

最佳答案

虽然 id 是主(且唯一)键,但您肯定会在唯一键角色中使用 field_iduser_id 的组合。

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

关于MySQL:如果不存在,插入的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574732/

相关文章:

mysql - SQL `group by` 与 `order by` 性能

mysql - 运行链接到我的 Django 项目的 mysql 数据库

php - "REPLACE INTO"与 INSERT [IF]

c - i ["string"] 如何用作条件语句?

mysql - 如何在 MySQL 中查找重复值和更新值

mysql - 查找单笔订单支付最高金额的客户姓名

php - 忽略不工作 Mysql

mysql - 在表中插入 2 个值

mysql limit 关键字的最大值

python - 如何在给定条件下生成所有可能的组合以使其更有效?