为什么MySQL在违反唯一键约束时会出现自动增量间隙,但违反主键约束时却不会?

2023-12-25

我明白当使用INSERT ... ON DUPLICATE KEY UPDATE在 MySQL 中,当插入失败时,会出现自动增量间隙。然而,我注意到,只有在违反唯一键约束时才会出现间隙。如果主键约束失败,则不会出现自增间隙。

两者差异的原因是什么?

Thanks!


如果自动增量字段是主键,则只有在插入语句中显式将自动增量字段的值设置为该字段中已存在的值时,才会发生主键重复(我不知道为什么要这样做) 。

作为 mysql 文档使用自动增量 https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html says:

当您将任何其他值插入 AUTO_INCREMENT 列时,该列将设置为该值,并且顺序将重置,以便下一个自动生成的值从最大的列值开始按顺序排列。

关键是,在这种情况下,mysql 不会尝试为自动增量列生成值,而是会使用插入中指定的值。此外,序列也会重置为字段中的最大值,因此下一次插入不会有任何间隙。

但是,如果在尝试插入时另一个唯一索引约束失败,则 mysql 已经生成了自动增量字段的值,因此在自动增量序列中会创建一个间隙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么MySQL在违反唯一键约束时会出现自动增量间隙,但违反主键约束时却不会? 的相关文章

  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 通过连接从两个表中删除?

    我有两个表如下 tbl1 tbl2 id article id title image whole news tags author older datetime 其中 tbl1 id gt tbl2 article id 如何从两个表中删
  • mySQL MATCH 跨多个表

    我有一组 4 个表 我想对其进行搜索 每个都有全文索引 查询可以使用每个索引吗 CREATE TABLE categories id int 5 unsigned NOT NULL auto increment display order
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • Flask-login:无法理解它是如何工作的

    我试图理解如何Flask Login https flask login readthedocs org en latest works 我在他们的文档中看到他们使用预先填充的用户列表 我想使用数据库存储的用户列表 但是 我不明白其中的一些
  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希

随机推荐

  • 有谁知道'top'命令的结果在android中的含义吗?

    我发现 top 的结果与标准linux中的结果不同 我在网上搜索了一下 但找不到答案 例如 以下是我的android中top的部分结果 PID CPU S THR VSS RSS PCY UID Name 814 2 R 1 940K 37
  • 你用过KMP或者BM算法吗?

    我知道KMP Knuth Morris Pratt 和BM Boyers Moore 算法都是很好的字符串搜索操作算法 我还知道BM比KMP快3 5倍 在您的行业软件编程经验中 您是否使用过BM或KMP算法 算法在这里真的很重要吗 如果你看
  • 纯虚方法调用错误

    我有以下定义 class PartitioningMethod public virtual void addConstraints ConstraintManager cm 0 virtual bool hasMoreConstraint
  • Pandas:如何根据不同列的值对列元素的组合进行分组以指示共现?

    我有一个以下形式的 pandas 数据框df Batch ID Product ID 1 A 1 B 1 C 2 B 2 B 2 C 2 C 3 B 3 B 3 C 4 C 4 D 5 D 我想从中获得一个边缘列表 本质上是一个新的数据框边
  • 我可以将 Prism 用于 WinUI 3 应用程序吗?

    我想在 WinUI 3 应用程序中使用 Prism 并且我看到了 Prism v8 1 版本 此外 Prism 8 1 还为那些希望使用 Uno 平台构建本机 WinUI3 或跨平台 WinUI 3 应用程序的用户提供了新的 Prism U
  • SparkSession.sql 和 Dataset.sqlContext.sql 有什么区别?

    我有以下代码片段 我想知道这两者之间有什么区别 我应该使用哪一个 我正在使用火花2 2 Dataset
  • 如何将手动插入和JPA Id生成结合起来?

    我正在使用 arquillian 运行容器内测试 我通过添加一个来预填充数据库import sql到部署 在测试期间我想创建更多实体 不幸的是 这失败了PersistenceException javax persistence Persi
  • 如何在 Jetpack Compose Canvas 中绘制圆角多边形?

    我正在尝试使用创建一个圆角三角形Canvas在 Jetpack Compose 中 我尝试用这段代码来绘制三角形 Composable fun RoundedTriangle Canvas modifier Modifier size 50
  • Python 看门狗重复事件

    我创建了一个修改后的看门狗示例 以便监视已添加到 Windows 中特定目录的 jpg 照片文件 import time from watchdog observers import Observer from watchdog event
  • 如何从 Windows 设置环境变量

    在 windows xp 7 8 vista 10 等中添加环境变量的方法是什么 在 Windows 7 8 Vista 或 XP 中 在桌面或开始菜单中找到 我的电脑 图标 右键单击它 然后从菜单中选择 属性 项 当您看到属性对话框时 单
  • 在 Rails 中渲染 JSON 时包含关联模型

    现在我有这一行 render json programs except gt created at updated at 但是 由于程序属于公司 我想显示公司名称而不是公司 ID 渲染节目时如何包含公司名称 像这样的东西应该有效 rende
  • 如何通过 git pre-receive hook 验证用户身份

    我想写一个pre receivePython 中的 githook 据我了解 没有任何参数被传入pre receive脚本 而不是每个引用都是使用标准输入在单独的行上传递的 我已经能够通过以下方式阅读参考更改 usr bin env pyt
  • 如何创建具有静态返回类型的扩展方法?

    我试图编写一个简单的扩展方法Color返回该颜色的黑色和白色等效值的静态类 问题是扩展方法无法返回Static类型 那么 我该怎么做呢 请帮我 问题是没有方法可以返回静态类型 静态类是无状态的 或仅具有静态状态 因此只有一个 实例 可以从引
  • 对数据库中的所有表启用更改跟踪

    假设在 SQL Server 数据库上启用了更改跟踪 如何在数据库中的所有表上启用更改跟踪 您可以使用以下 T SQL 脚本生成另一个 T SQL 脚本 该脚本启用CHANGE TRACKING所有具有主键的表的功能 Step 1 Exec
  • 如何区分 jQuery 选择器字符串和其他字符串

    我想检查字符串的 类型 特别是 如何区分 jQuery 选择器字符串和其他字符串 也就是说 下面的代码中selectorTest应该如何实现呢 var stringType function value var htmlExpr lt lt
  • C++:#pragma comment(lib, "XXX") 实际上对“XXX”做什么?

    我的背景是 C 但我必须保留一些遗留的 MS C 在那个代码库中我偶然发现 pragma comment lib OtherLib700 lib 其中 700 是一些版本控制 除此之外 该库还有一个同名的 DLL 我首先认为该程序将依赖于
  • 如何从 OHLC 数据计算枢轴值

    我有一个带有 open high low close 和 key 列的 pandas 数据集 现在我想按键对数据集进行分组 并使用公式 最高价 最低价 收盘价 3 计算枢轴 到目前为止我可以做到 但要求是将计算的数据转移到下一组 我无法编码
  • pthread 中的信号处理

    我创建了一个 pthread 并在其中安装了一个信号处理程序 与我们在中所做的方式相同main 功能 线程的信号处理程序是一个单独的函数 令人惊讶的是 它不起作用 即线程的信号处理程序无法捕获信号 这是代码 include
  • NSNumberFormatterStyle.SpellOutStyle 中的错误?

    当我将 NSNumberFormatterStyle SpellOutStyle 用于较大的数字 不是溢出类型的数字 时 它似乎会在四万亿中的某个地方崩溃 let formatter NSNumberFormatter formatter
  • 为什么MySQL在违反唯一键约束时会出现自动增量间隙,但违反主键约束时却不会?

    我明白当使用INSERT ON DUPLICATE KEY UPDATE在 MySQL 中 当插入失败时 会出现自动增量间隙 然而 我注意到 只有在违反唯一键约束时才会出现间隙 如果主键约束失败 则不会出现自增间隙 两者差异的原因是什么 T