当前位置: 首页 > 科技观察

MySQL自增ID,大部分人都搞错了!?

时间:2023-03-16 23:10:35 科技观察

《??MySQL删除数据的三种方式??》99%的作业题都答错了,有点出乎意料。画外音:评论里有很多小伙伴嘲笑简单的知识点。今天简单说一下作业题中的答案和知识点。作业题是这样的:实验步骤如上图:第一步:创建表,设置自增列;第二步:指定id=1插入,锚定第一行id为1;第三步:不指定id,依赖自增机制,插入3行;画外音:这时候id应该变成2、3、4了吧?第四步:删除删除所有记录;画外音:这里的坑很容易出来。第五步:指定id=0进行插入;第六步:指定id=1进行插入;第七步:插入1行,不指定id,依赖自增机制;请问,此时表中的三行记录,id分别是多少?知识点1:删除数据后,自增列计数不会从头开始。画外音:截断数据后,自增列会从头开始计数。因此,在第四步将4条记录全部删除后,自增列计数不会归0,也就是说下一条插入记录时自增列的值为5。知识点2:对于有自增列的表,插入时可以手动指定自增列的值,但不能与已有值冲突,也可以使用自增列的系统默认值增量列。所以第五、六、七步都是允许的:insert(0,'000')insert(1,'111')insert('222')知识点三:如果自增列的值为手动指定为0或NULL,MySQL会认为无效,使用系统默认自增列的值。也就是说,第五步insert(0,'000')或insert(NULL,'000')会被MySQL视为:insert('000'),即实际插入到表中的记录是(5,'000')第六步insert(1,'111')没问题。实际插入也是(1,'111')。知识点4:如果使用系统默认的自增列值,它会从当前的最大值开始,向后递增。也就是说,第七步insert('222')会使用默认值6,而不是2。实际插入是(6,'222')。所以,实验的结果,最后三行记录是:5,0001,1116,222你答对了吗?为了巩固以上知识点,我们一起复习一下:droptablet1;createtablet1(idintnotnullauto_increment,namevarchar(10)unique,countintdefault0,primarykey(id),index(name))engine=innodb;insertintot1(id,name)values(1,"shenjian");insertintot1(id,name)values(111,"111"),(NULL,"abc"),(222,“222”),(NULL,“xyz”);请问,执行结束后的id是什么?Answer:(1,'shenjian')(111,'111')//允许指定值(112,'abc')//忽略NULL,从最大值开始增加(222,'222')//允许指定value(223,'xyz')//忽略NULL,从最大值开始增加如果继续执行下面语句:insertintot1(name)values("shenjian"),("aaa"),("bbb")重复键更新计数=100;请问:会不会报错?如果报错,为什么?如果没有报错,得到的数据是什么?知道它是什么,知道它为什么在底部。