使用案例场景再现:
创建一个为test的数据库,为数据库test创建一个数据表student ,其中包含的字段有 id name sex,admission_time,其中要求student表中的人员id必须连续排列。
create database test use test
create table student (
id int primary key auto_increment
name varchar(15)
sex varhcar(5)
admission_time data
)
其中 auto_increment 就是自增列,具体功能是当需要产生唯一标识符或顺序值时,可设置自增长,一般使用于一张表中的主键
关键字 : auto_increment 主要被用于主键
注意点:一个表最多只能有一个自增长列
(2)自增长列约束的列必须是键列(主键列,唯一键列)
(3)自增约束的列的数据类型必须是整数类型
(4)如果自增列指定了 0 和 null,会在当前最大值的基础上自增;
案例测试一:(一个表最多只能有一个自增长列)
错误示例:
CREATE TABLE student (
id int PRIMARY KEY AUTO_INCREMENT,
NAME varchar(15),
sex varhcar(5),
admission_time DATA UNIQUE AUTO_INCREMENT
)
错误示例:自增长列约束的列必须是(主键列或 唯一键列)
CREATE TABLE emp2(
id INT AUTO_INCREMENT,
`NAME` VARCHAR(20),
pwd VARCHAR(15)
)
错误代码: 1075
Incorrect table definition; there can be only one auto column and it must be defined as a key
(表定义不正确;只能有一个自动列,并且必须将其定义为键)
错误示例2:自增长列约束的列必须是(主键列或 唯一键列)
CREATE TABLE emp2(
id INT primary key,
`NAME` VARCHAR(20) ,
pwd int AUTO_INCREMENT
# 没有声明密码的唯一性如果改为
pwd int unique AUTO_INCREMENT # 正确的
)
为什么AUTO_INCREMENT,建议被用于 主键 而且数据类型必须为 int ,首先要从它作用看,它是被用来对某一字段自增加1的,比如你需要给你们班级建立一个表,从第一个学生开始,你每入一个学生信息,是不是需要修改一下它的id号,将其写为 1 ,2, 3,4,.....
如果你将它的id号设置了自增,那是不是就不用管id了,你每插入新的记录它都会增。
案例:
创建一个表
CREATE TABLE emp2(
id INT PRIMARY KEY AUTO_INCREMENT,
`NAME` VARCHAR(20),
pwd VARCHAR(15)
)
插入三条数据
INSERT INTO emp2(`name`,pwd) VALUES
("李四","xcvb"),
("王麻子","xcvb"),
("刘栋","xcvb");
因为我们将 id字段设置了自增 (AUTO_INCREMENT) 所以 emp2表的id字段会自动增长,我们就不用在给她赋值例如:
INSERT INTO emp2(`name`,pwd) VALUES
(1,"李四","xcvb"),
(2,"王麻子","xcvb"),
(3,"刘栋","xcvb");
注意: 如果我们已经将id号设置为了自增列,就不建议再次对自增列复新值了
INSERT INTO emp2(id,`name`,pwd) VALUES
(10,"周记","xcvb")
我们在插入新的排列顺序时,会出现问题
INSERT INTO emp2(`name`,pwd) VALUES
("马林","xcvb")
name = 马林 这条数据会从id = 11 开始,而不是我们刚按顺序排列的4 插入完成后应该是 id = 5
注意:在对已经设置了自增列的表插入新的数据时,一定要考虑好里面的数据,如果在后续出现问题的话,删除这条信息 ,在重新插入的时候会出现裂缝
我们来删除 id = 4 name = "刘栋" 这条数据
DELETE FROM emp3 WHERE id = 4
重新插入一条数据 :INSERT INTO emp3(`name`,pwd) VALUES
("周记","xcvb")
如果按照常规理解 id = 4被删掉了,重新按照顺序插入的话应该是4,其实不是。
通过查看表内数据,id是从5开始排列,这样操作有的时候会造成主键冲突及其一些其他问题,(主键冲突的原因就是,列表中存在这样一条数据,我们重新相同id的数据插入的话会发现插入不成功,出现这种问题的原因是因为我删除了某些数据,经过一段时候后人为的记忆就会忘记一些数据信息),当然你也可以在后面另行补上。 insert into 表名(4,`name`,pwd)。
这叫自增变量持久化。mysql 8.0 不会初始化,自增列的排列数据信息,会将历史的自增后删除了数据操作记录保留在重做日志中。
总结:(论语二则)
“君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉学可谓好学也已。”
君子吃饭不求填饱肚子,居住不追求安逸宽大的房子,勤快的做自己该做的事情,和他人谈话要谨而慎之,接近有道德有学问的人并向他学习,纠正自己的缺点,就可以称得上是好学了
子曰,质胜文则野,文胜质则史,文质彬彬,然后君子
“质朴超过文采就会显得粗狂野蛮,文采超过质朴就会过于浮华。文采与质朴搭配适中,才能成为君子。”