mysql - 什么时候使用 INSERT IGNORE 好习惯?

标签 mysql sql conventions

在我生活的世界中,构建一个将所有飞镖都扔到墙上的解决方案,并希望其中一些能命中靶心是一种非常糟糕的解决方案方法。

那么,我的问题出现了,什么时候在约定可接受的生产系统中使用 INSERT IGNORE

我想写一个 TRIGGER(参见 #17353080)来搜索现有数据,如果找不到,则将其INSERTed。建议使用 INSERT IGNORE 并依赖唯一字段的 primary keying

所以,我有一个困境:

  1. 我是否使用 INSERT IGNORE 并依赖于 primary keying 我想保持唯一性的字段,使任何重复的 INSERT 失败
  2. 我是否重复查询目标表以检查是否存在我想保持唯一性的字段值,如果不存在则INSERT

由于这些问题在这个特定的媒体中太模糊了,我想了解什么时候可以按照惯例使用 INSERT IGNORE,我可以根据我的具体情况做出自己的判断。

谢谢,

马特

元:

我认为,因为 conventions 是一个描述为的现有标签:

A generic tag covering any accepted method of doing things, which could include naming, spacing, coding, commenting, etc.

这种类型的问题是可以接受的。

最佳答案

从逻辑上讲,我会说这取决于您在失败时需要做什么。

如果您只是执行批量插入并且不关心该值是否已经在表中 - 只要它保持唯一 - 那么 INSERT IGNORE 是明智的。顾名思义,您乐于忽略任何未插入的内容

如果您需要对失败的插入执行某些操作,例如建议您的用户,则有必要执行单独的检查。

然而,最重要的问题是:“为什么值已经在表中了?”

关于mysql - 什么时候使用 INSERT IGNORE 好习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382339/

相关文章:

php - 安卓 : Upload Image to mysql

mysql - 如何为我给定的条件创建一个 sql 查询?

mysql - MySQL中IN和JOIN的执行顺序

c# - ToString 的约定

c# - (约定)C# 类名

java - 规范 CriteriaBuilder 将 ZonedDateTime 转换为 LocalDate 以进行比较

mysql - 无法检索 Wildfly、Arquillian 设置中的 JPA 实体

mysql - MySQL中加入同表临时表

c# - 为什么这个带有参数化 sql 的 C# 数据库应用程序不能工作?

c++ - 这不是垂头丧气吗?