MySQL【AUTO_INCREMENT 】自增列

使用案例场景再现: 

创建一个为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");

MySQL【AUTO_INCREMENT 】自增列_第1张图片

注意: 如果我们已经将id号设置为了自增列,就不建议再次对自增列复新值了

INSERT INTO emp2(id,`name`,pwd) VALUES
(10,"周记","xcvb")

MySQL【AUTO_INCREMENT 】自增列_第2张图片

我们在插入新的排列顺序时,会出现问题 

INSERT INTO emp2(`name`,pwd) VALUES
("马林","xcvb")

MySQL【AUTO_INCREMENT 】自增列_第3张图片

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,其实不是。

MySQL【AUTO_INCREMENT 】自增列_第4张图片

通过查看表内数据,id是从5开始排列,这样操作有的时候会造成主键冲突及其一些其他问题,(主键冲突的原因就是,列表中存在这样一条数据,我们重新相同id的数据插入的话会发现插入不成功,出现这种问题的原因是因为我删除了某些数据,经过一段时候后人为的记忆就会忘记一些数据信息),当然你也可以在后面另行补上。   insert into 表名(4,`name`,pwd)。

这叫自增变量持久化。mysql 8.0 不会初始化,自增列的排列数据信息,会将历史的自增后删除了数据操作记录保留在重做日志中。

总结:(论语二则)

“君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉学可谓好学也已。”

君子吃饭不求填饱肚子,居住不追求安逸宽大的房子,勤快的做自己该做的事情,和他人谈话要谨而慎之,接近有道德有学问的人并向他学习,纠正自己的缺点,就可以称得上是好学了

子曰,质胜文则野,文胜质则史,文质彬彬,然后君子

“质朴超过文采就会显得粗狂野蛮,文采超过质朴就会过于浮华。文采与质朴搭配适中,才能成为君子。”

你可能感兴趣的:(高级数据库技术,mysql,数据库,sql)