当前位置: 首页 > news >正文

MySQL中的隐式主键和隐藏列

目录

开源示例

sql_generate_invisible_primary_key=on

sql_generate_invisible_primary_key=off

AliSQL

sql_generate_invisible_primary_key=off

思考?

注意事项


从MySQL 8.0.30 开始,MySQL支持为任何没有显式主键的InnoDB表生成不可见的主键。当sql_generate_invisible_primary_key服务器系统变量设置为ON时,MySQL服务器会自动将生成的不可见主键(GIPK)添加到任何此类表中。此设置对使用除InnoDB以外的任何其他存储引擎创建的表没有影响。

默认情况下,sql_generate_invisible_primary_key的值为OFF,这意味着GIPK的自动添加被禁用。

官方文档:https://dev.mysql.com/doc/refman/8.0/en/create-table-gipks.html

开源示例

MySQL 8.0.37

sql_generate_invisible_primary_key=on

sql_generate_invisible_primary_key=off

AliSQL

MySQL 8.0.36

sql_generate_invisible_primary_key=off

AliSQL有自研的参数show_ipk_info用来控制是否显示隐式主键的信息

思考?

那么为什么再上述sql_generate_invisible_primary_key=off的情况下依然会生成一个GEN_CLUST_INDEX聚集索引?

这是因为 InnoDB 存储引擎要求每个表必须有一个聚集索引。如果表中没有显式定义主键,也没有合适的唯一索引,InnoDB 会内部生成一个隐藏的聚集索引,通常命名为 GEN_CLUST_INDEX

这个隐藏的聚集索引是构建在一个包含行 ID 值的合成列上的,即使没有生成隐藏列,这个索引也会被创建以满足 InnoDB 对聚集索引的要求。因此,关闭 sql_generate_invisible_primary_key 选项并不影响聚集索引的自动创建,它只影响是否生成一个不可见的主键列。

row_id 再MVCC中有过介绍

https://www.yuque.com/eucalyptus-byepv/epkbe4/bgohmgh5m2w69p0z

注意事项

当sql_generate_invisible_primary_key=on时,创建的表有隐藏列`my_row_id`并且再该隐藏列上有primary key的情况下再去添加primary key是不被允许的

(1068, 'Multiple primary key defined')

并且删除隐藏列`my_row_id`和隐藏列`my_row_id`上的primary key都是不被允许的

(1235, "This version of MySQL doesn't yet support 'existing primary key drop without adding a new primary key. In @@sql_generate_invisible_primary_key=ON mode table should have a primary key. Please add a new primary key to be able to drop existing primary key.'")

相关文章:

  • 【题解】P1156 垃圾陷阱
  • Django的HelloWorld程序
  • 纯血Harmony NETX 5小游戏实践:贪吃蛇(附源文件)
  • Python训练营打卡 Day50
  • FreeRTOS信号量
  • @Configuration原理与实战
  • ​计算机网络原理超详解说​
  • Web后端基础:Maven基础
  • Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智驿AI系统(前后端源码 + 数据库 sql 脚本)
  • P4 QT项目----串口助手(4.2)
  • 2025 高考:AI 都在哪些地方发挥了作用
  • crackme007
  • 电脑一段时间没用就变成登陆的界面
  • CppCon 2015 学习:Implementing class properties effectively
  • RocketMQ延迟消息机制
  • 【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
  • 第5章 类的基本概念 笔记
  • 不变性(Immutability)模式
  • b2b企业网络营销如何用deepseek、豆包等AI平台获客 上海添力
  • switch选择语句
  • 给企业做网站推广好么/网站优化排名工具
  • 营销网站建设哪家便宜/营销软文推广平台
  • 做网站的画布是多少/百度竞价推广的技巧
  • 东莞网站建设如何做/接推广一般多少钱
  • 论坛网页模板/百度推广seo优化
  • 网站的建设目标有哪些/成都seo顾问