花了3篇文章聊InnoDB自增ID的机制,《批量删除数据,常见的大坑!》中的作业题,仍然90%的人答错,有点出乎意料。作业题是这样的:

实验步骤如上图:第一步:建表,设定自增列;第二步:指定id=1插入,锚定第一行是id是1;第三步:不指定id,依赖自增机制,插入3行;画外音:此时id应该变为2,3,4了?第四步:delete删除所有记录;画外音:坑就容易出在这里。第五步:指定id=0插入;第六步:指定id=1插入;第七步:不指定id,依赖自增机制,插入1行;请问,此时表中的三行记录,id分别是多少?在三篇前序文章:《三类插入》《三类插入测验答案》《批量删除数据,常见的大坑!》已说明相关知识点的情况下,点赞结果是:(1)一楼(015):144赞(2)二楼(156):36赞(3)三楼(015):14赞(4)其他(017,012,567,056):20赞画外音:点赞情况详见《批量删除数据,常见的大坑!》的评论。《批量删除数据,常见的大坑!》一文中已经明确指出:(1)delete数据后,自增列计数不会从头开始;(2)truncate数据后,自增列计数会从头开始;画外音:除此之外,还有很多不同,但和本实验关系不大。《三类插入》一文也明确的指出:(1)简单插入(simple insert)能够保持自增ID的连续性;(2)批量插入(bulk insert)可能导致自增ID不连续;(3)混合插入(mixed-mode insert)在实际执行的时候,才知道是否使用系统生成的自增ID;《三类插入测验答案》一文指出:(1)自增ID从1开始;(2)插入记录时,可以自己指定自增ID的值,也可以使用数据库生成的自增ID的值;(3)如果指定ID为“NULL”或者“0”,会使用数据库生成的自增ID;画外音:除此之外,文章还分享了很多知识,但和本实验关系不大。今天,再把过程展开下,希望大家别再搞错。

建表,插入四条数据,再delete所有数据,此时自增ID计数不会归0,下一条插入的行,自增ID会从5开始。画外音:使用truncate则计数会归0。

指定ID,插入(0, ‘000’),命中“ID为NULL或者0,使用系统自增ID”的策略,故实际记录为(5, ‘000’)。画外音:下一条插入的行,自增ID会从6开始。

指定ID,插入(1, ‘111’),插入成功。

不指定ID,插入(‘222’),使用系统自增ID,故实际记录为(6, ‘222’)。故,实验结果,最终的三行记录是:5,0001,1116,222你答对了吗?架构师之路-分享技术思路

相关文章

《InnoDB架构,一幅图秒懂!》

db2插入的时候怎么自增_3篇长文讲“自增ID”,大部分人仍然搞错了!?相关推荐

  1. mysql查询添加数据库表_MySQL数据库篇之表的增删改查

    主要内容: 一.表介绍 二.创建表 三.查看表结构 四.修改表结构 五.复制表 六.删除表 1️⃣ 表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称 ...

  2. mysql 主键冲突 多个事务回滚_MySQL实战45讲Day38----自增主键不是连续的原因

    一.自增主键不连续的原因: 对于表: CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL ...

  3. mysql自增主键和mybatis自增主键不一致问题(已解决):

    mysql自增主键和mybatis自增主键不一致问题(已解决): 在插入数据前,先进行查询主键 <insert id="insertSelective"><sel ...

  4. mysql自增默认值_mysql auto_increment自增初始值与步长

    MySQl自增列起始与步长 自增初始值 一.alter的使用 默认初始值为1 步长为1的情况 1.建表 2.插入数据 当插入数据可以看到步长为1,起始值为1 3.增加一列数据时 默认在加上步长 4.删 ...

  5. mysql数据库增删改查关键字_MySQL数据库(增删改查语句)

    MySQL数据库(增删改查语句) 一.登录数据库:---->  mysql -uroot -proot;(对应用户名和密码) 二.SQL语句: 数据定义语言DDL  用来定义数据库.表.列,关键 ...

  6. oracle导出自增设置,oracle008:oracle自增,自适应,数据闪回,导入导出

    oracle008:oracle自增,自适应,数据闪回,导入导出 oracle008:oracle自增,自适应,数据闪回,导入导出 一,oracle数据自增 在MySQL中自增使用主键和自增来实现,但 ...

  7. linux从a自增10_C语言程序前后自增(++a、a++)在Linux下的实现机制

    看到一道"经典Linux C"面试题,关于左值和右值的. 华为笔试题 1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; ...

  8. C语言两个自增相加,C语言前自增与后自增

    C语言前自增与后自增教程 在 前自减与后自减的区别是前自减是先自减后赋值,后自减是先赋值后自减. C语言前自增与后自增区别 语法 运算符 语法 例子 结果 后自增 a++ int a = 0; int ...

  9. BAE Systems的空天部门计划采用Simufact 增材制造软件用于金属增材制造-20190328--【金属前沿001】

    BAE Systems的空天部门计划采用Simufact 增材制造软件用于金属增材制造 BAE Systems Air to employ Simufact Additive for metal AM ...

最新文章

  1. 重新编号_武汉黄陂公交线路PW、PG、PZ……分不清?别急,就要重新编号啦
  2. 18.移动架构数据库升级解决方案
  3. unity-tweak-tool不能打开的解决办法
  4. python opencv 批量将视频转化为图片
  5. 通过迭代在DataFrame中取出满足某种条件的列,函数 —— .columns
  6. 轻量级HTTP服务器Nginx(安装篇)
  7. python去噪音_python中的噪声是什么意思
  8. 第六届省赛(软件类)真题----Java大学B组答案及解析
  9. BasKet Note Pads-利用软件作条记
  10. 命令行调用dubbo服务
  11. 考满分软件测试工程师(实习)面试软达启航面试
  12. ant执行命令的详细参数和Ant自带的系统属性
  13. 红帽全年总营收24亿美元,同比增长18%
  14. 【C语言】通讯录制作
  15. 黑刀 php,黑刀Dezender (PHP解密)
  16. 怎么给计算机管理设置密码,如何给电脑设置密码
  17. Vue-实现商品放大镜效果
  18. 浅谈深度学习:了解RNN和构建并预测
  19. 基于PHP+小程序(MINA框架)+Mysql数据库的食堂餐厅就餐预约小程序系统设计与实现
  20. wireshark 安装后运行出现问题

热门文章

  1. 基础知识—条件判断语句-switch语句
  2. js负数比较大小_【建阳童小|阅享数学(第十一期)】负数的由来
  3. 29日直播预告丨Oracle PDB Refresh实战分享
  4. 详述MySQL事务的实现原理
  5. 当时间管理碰上大数据,从此,悠悠时光也终不再那么漫长
  6. 数字孪生技术如何实现复制世界?关键的关键是…
  7. 华为云 AI 实战营计划,带你迈上 AI 之路
  8. c语言中用gaminv,轻松上手游泳模式,用Garmin腕表一定要知道的五件事
  9. MySQL指定存储引擎命令_MySQL常用指令(2)——存储引擎
  10. easyphp 登陆mysql_EasyPHP/phpmyadmin 尝试连接到 mysql 服务器 但服务器拒绝连接