• 什么是AUTO_INCREMENT

Mysql 8.0 使用 AUTO_INCREMENT

在我们的使用中,AUTO_INCREMENT主要应用于主键,目的是生成唯一且连续的主键(自增主键)

为什么要唯一?唯一ID呀,就像身份证号一样,一条数据一个号,好找

为什么要连续?这个我会再写一篇文档解释,立个flag,这周五发布

  •  AUTO_INCREMENT 的相关配置

auto_increment_increment 步长
auto_increment_offset 初始值
show variables like '%auto_increment%';+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
  • AUTO_INCREMENT的初始化

当你在innodb的表中指定一列为AUTO_INCREMENT时,则内存中会创建一个计数器,MySQL 5.7 及更早版本中,自动递增计数器存储在主内存中,而不是磁盘上。要在服务器重新启动后初始化自动递增计数器,InnoDB将在第一次插入包含AUTO_INCREMENT列的表时执行以下等效语句 。

SELECT MAX(ai_col) FROM table_name FOR UPDATE;

在 MySQL 8.0 中。当前最大自动递增计数器值在每次更改时写入redo log并保存到每个检查点的数据字典中。这个改变使当前最大递增计数器值在服务器重新启动时保持不变。

在正常关闭后重新启动服务器时, InnoDB使用存储在数据字典中的当前最大自动增量值初始化内存中自动增量计数器。

在崩溃恢复服务器重新启动时, InnoDB使用存储在数据字典中的当前最大自动增量值初始化内存中计数器,并扫描 redo log 以查找上次检查点写入的自动增量计数器值。如果 redo log 值大于内存计数器值,则应用 redo log 值。但是,在服务器意外退出的情况下,无法保证不重复使用先前分配的自动增量值。每次当前最大自动增量值由于INSERT 或 UPDATE操作,新值写入redo log ,但如果在 redo log 刷新到磁盘之前发生意外退出,则可以在服务器重新启动后初始化自增计数器时重新使用先前分配的值。

InnoDB使用(SELECT MAX(ai_col) FROM table_name FOR UPDATE)初始化自动递增计数器的唯一情况是在导入没有元数据文件的表时否则,从元数据文件中读取当前最大自动递增计数器值(如果存在)。除了计数器值初始化之外,当尝试使用以下语句将计数器值设置为小于或等于持久计数器值时,语句的等效项 用于确定表的当前最大自动递增计数器值SELECT MAX(ai_col) FROM table_name FOR UPDATE.cfg.cfgSELECT MAX(ai_col) FROM table_nameALTER TABLE ... AUTO_INCREMENT = N FOR UPDATE陈述。例如,您可能会在删除某些记录后尝试将计数器值设置为较小的值。在这种情况下,必须查表以确保新的计数器值不小于或等于当前实际的最大计数器值。

  • AUTO_INCREMENT的值

通过 show create table 表名

show create table t;+-------+-----------------------------------------------------------+
| Table | Create Table                                              |
+-------+-----------------------------------------------------------+
| t     | CREATE TABLE `t` (                                        |    `id` int NOT NULL AUTO_INCREMENT,`c` int DEFAULT NULL,`d` int DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `c` (`c`)) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8mb4             COLLATE=utf8mb4_0900_ai_ci
+-------+-----------------------------------------------------------+

可以看到当前的 AUTO_INCREMENT 是67 也就是下一条数据的id为67

  • AUTO_INCREMENT的赋值

执行 INSERT 语句时 形如 insert into t(id) values( X ); 对AUTO_INCREMENT的影响

输入值

实际ID

AUTO_INCREMENT
0或null或未指定 AUTO_INCREMENT AUTO_INCREMENT+ auto_increment_offset
X >= AUTO_INCREMENT  X X + auto_increment_offset
X< AUTO_INCREMENT  X AUTO_INCREMENT

Mysql的AUTO_INCREMENT相关推荐

  1. 【原创】 PostgreSQL 实现MySQL 的auto_increment 字段

    2019独角兽企业重金招聘Python工程师标准>>> MySQL 里面有auto_increment 自增字段,PostgreSQL 没有自增字段这一说法,但是有单独的对象:序列. ...

  2. mysql变更AUTO_INCREMENT值

    2019独角兽企业重金招聘Python工程师标准>>> 数据库中id的值 mysql> select * from user_id_seq; +----------+----- ...

  3. MySQL 中 AUTO_INCREMENT 的“坑” --重复值问题

    MySQL · 捉虫动态· InnoDB自增列重复值问题 问题重现 先从问题入手,重现下这个 bug use test; drop table if exists t1; create table t ...

  4. MySQL 中 AUTO_INCREMENT 的“坑”--id不连续

    背景 最近在玩 MySQL 双主复制架构,表里的主键使用自增ID,为了避免两台主库生成的主键冲突,遂两台主库分别配置如下: server 1 的 my.cnf : auto_increment_inc ...

  5. 【MySQL】AUTO_INCREMENT只能应用于数值类型的列,且该列需要被索引

    MySQL中的自动增量AUTO_INCREMENT,是有使用条件的 该列(column)的数据类型必须是数值型(这点容易理解,数值才能自增) 该列必须被索引,比如定义为主键(PRIMARY KEY) ...

  6. MySQL的auto_increment使用

    说明 总结自<mysql技术内幕(第5版)> 创建auto_increment列要遵循如下规则 每个表只能有一个列具有auto_increment属性,且必须为整数数据类型 (当然,也支持 ...

  7. mysql alter auto increment_修改mysql中Auto_increment值的例子

    要求: 修改mysql中某张表的下一条记录的Auto_increment值. 操作方法: 查看db.table表的下一条记录auto_increment的值: show table status fr ...

  8. Mysql之AUTO_INCREMENT浅析

    文章目录 术语 锁模式 注意点 总结 参考链接 AUTO_INCREMENT用于为表中的列设置一个自增序列,在非集群模式下,用它来为主键列自动生成值是一件很方便的事.并且,Mysql提供了一系列的锁机 ...

  9. MySQL中 auto_increment如何修改初始值和步长【亲测】

    1.如何查看auto_increment的初始值和步长 打开黑窗口,登录管理员账号和密码后,执行以下命令: show variables like 'auto_inc%'; -- 查看当前数据库的自增 ...

最新文章

  1. 鸿蒙系统手机用户体验,鸿蒙系统真的来了!用户体验流畅度远超安卓,任正非扳回一城!...
  2. 一段简单的JavaScript代码,实现在同一网页输出多个图标的功能
  3. 将PDF和Gutenberg文档格式转换为文本:生产中的自然语言处理
  4. jq之省市区级联插件
  5. python截取指定字符串_python 正则匹配获取指定多个词的在字符串(句子/段落)索引位置...
  6. MySql 你知道 order by 是怎么回事吗? MySql全字段排序与 rowid 排序
  7. 剑指Offer07题解-重建二叉树
  8. (已解决)iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)
  9. 由于找不到opencv_world412d.dll,无法继续执行代码
  10. UIScrollView与分页的联合使用
  11. python查看指定文件的绝对路径和当前工作路径
  12. Hungry for your love 真爱无限
  13. 吃着火锅唱着歌,却被操作系统砸了饭碗,开发者如何反击?
  14. Poco库使用:文件目录操作
  15. C语言中关键字const、typedef
  16. springboot连接数据库用户名密码加密
  17. 如何把docx转成doc
  18. 《“网上邻居”无法互访问题解决方法大全 》
  19. OpenCV学习笔记(七)——图像梯度及边缘检测
  20. 阿里云二级域名解析到指定端口号的一种方法

热门文章

  1. CUDA+ GTX1050ti电脑配置
  2. 三个角度细谈:如何发挥朋友圈广告的威力
  3. 阿里云人脸对比API使用
  4. chrome设置默认首页无效
  5. 麒麟信安邀您抢先看 | openEuler 志高远,开源汇智创未来-开放原子全球开源峰会欧拉分论坛最详细议程出炉
  6. 应用程序“Parallels Desktop“无法打开MAC电脑打不开
  7. Idea21.1.3版本中Scala默认设置带类型
  8. 入手评测 华硕灵耀Pro16和联想YOGA 16s哪个好
  9. 今日头条,今日特卖自媒体号如何申请。
  10. select函数详细用法解析