mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长是其它几篇的合篇

Null属性

NULL属性:代表字段为空

 

如果对应的值为YES表示该字段可以为NULL,如下许多字段默认都可以为null,下面的d4是timestamp类型不能为null,

插入null时会自动插入当前时间

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

注意:

1、 在设计表的时候,尽量不要让数据为空(设计时在类型后加not null即可)

2、 Mysql的记录长度为65535个字节,如果一个表中有字段允许为NULL,那么系统就会设计保留一个字节来存储NULL,最终有效存储长度为65534个字节。

默认值

Default:默认值,当字段被设计的时候,如果允许默认条件下,用户不进行数据的插入,那么就可以使用事先准备好的数据来填充:通常填充的是NULL

 

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

测试:不给当前字段提供数据值

 

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

没有填充的字段显示为默认值18

Default关键字的另外一层使用:显示的告知字段使用默认值:在进行数据插入的时候,对字段值直接使用default

 

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

列描述

列描述:comment,是专门用于给开发人员进行维护的一个注释说明

基本语法:comment ‘字段描述’;

查看Comment:必须通过查看表创建语句

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

主键

顾名思义:主要的键,primary key,在一张表中,有且只有一个字段,里面的值具有唯一性

创建主键

随表创建

系统提供了两种增加主键的方式

1、 方案1:直接在需要当做主键的字段之后,增加primary key属性来确定主键

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

2、 方案2:在所有字段之后增加primary key选项:primary key(字段信息)

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

表后增加

基本语法:alter table 表名 add primary key(字段);

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

查看主键

方案1:查看表结构

语法:desc 表名;

方案2:查看表的创建语句

show create table 表名;

删除主键

基本语法:alter table 表名 drop primary key;

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

复合主键

案例:有一张学生选修课表:一个学生可以选修多个选修课,一个选修课也可以由多个学生来选:但是一个学生在一个选修课中只有一个成绩。

创建表并定义复合主键

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

插入数据:

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

复合主键的组合不能完全一样,比如小明不可能在历史考试中考了100分与59分!!

主键约束

主键一旦增加,那么对对应的字段有数据要求

1、 当前字段对应的数据不能为空;

2、 当前字段对应的数据不能有任何重复

 

主键分类

主键分类采用的是主键所对应的字段的业务意义分类

业务主键:主键所在的字段,具有业务意义(学生ID,课程ID)

逻辑主键:自然增长的整型(应用广泛)

 

自动增长

自动增长:auto_increment,当给定某个字段该属性之后,该列的数据在没有提供确定数据的时候,系统会根据之前已经存在的数据进行自动增加后,填充数据。

通常自动增长用于逻辑主键。

原理

自动增长的原理:

1、 在系统中有维护一组数据,用来保存当前使用了自动增长属性的字段,记住当前对应的数据值,再给定一个指定的步长

2、 当用户进行数据插入的时候,如果没有给定值,系统在原始值上再加上步长变成新的数据

3、 自动增长的触发:给定属性的字段没有提供值

4、 自动增长只适用于数值

使用自动增长(自动增长的列必须是个key,主键外键唯一键都行,且一张表只有能有一个自增长的字段(列))

基本语法:在字段之后增加一个属性auto_increment

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

插入数据:触发自动增长,不能给定具体值

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

 

修改自动增长

1、 查看自增长:自增长一旦触发使用之后,会自动的在表选项中增加一个选项(一张表最多只能拥有一个自增长)

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

另外几个表选项前面讲了,还多出了个 auto_increment=2:意思就是下次不向自增长列插入指定数值(如null)的话就插入2

注:可以像前面修改字符集那样修改自增长的值,但是自增长的值必须大于当前自增长列最大值,否则修改无效

2、 表选项可以通过修改表结构来实现

Alter table 表名 auto_increment = 值;

 

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

此时我再插入数据,自增长的值本应该为2变为了8

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

删除自动增长

删除自增长:就是在字段属性之后不再保留auto_increment,当用户修改自增长所在字段时,如果没有看到auto_increment属性,系统会自动清除该自增长

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

 

初始设置

在系统中,有一组变量用来维护自增长的初始值和步长

Show variables like ‘auto_increment%’;

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

第一个1为增量,第二个1为初始值

唯一键(唯一键是索引一种

 

唯一键:unique key,用来保证对应的字段中的数据唯一的

 

主键也可以用来保证字段数据唯一性,但是一张表只有一个主键。

1、 唯一键在一张表中可以有多个。

2、 唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较)

创建唯一键

创建唯一键与创建主键非常类似

1、 直接在表字段之后增加唯一键标识符:unique[ key]

2、 在所有的字段之后使用unique key(字段列表);

3、 在创建完表之后也可以增加唯一键
alter table 表名 add unique key(字段列表);

这里只演示第2种

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

 

查看唯一键

唯一键是属性,可以通过查看表结构来实现

desc 表名(上图中已查看)

唯一键效果:在不为空的情况下,不允许重复

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

在查看表创建语句的时候,会看到与主键不同的一点:多出一个“licenseId”

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

为什么唯一键创立后会自动创建一个名字?其实是索引,后续文章会讲解索引

删除唯一键

一个表中允许存在多个唯一键:假设命令为主键一样:alter table 表名 drop unique key;//错误的

Index关键字:索引,唯一键是索引一种(提升查询效率)

删除的基本语法:alter table 表名 drop index 唯一键名字;

 

mysql之列属性全篇(null,默认值,列描述,主键,唯一键和自动增长)

修改唯一键:先删除后增加

 

复合唯一键

唯一键与主键一样可以使用多个字段来共同保证唯一性;

一般主键都是单一字段(逻辑主键),而其他需要唯一性的内容都是由唯一键来处理。