【MySQL】表的约束

前言

        hi~大家好呀,欢迎来到我的MySQL学习笔记系列~

        继上次数据类型的描述,这篇笔记重点记录DDL-数据定义语言对表的结构中的其他约束条件进行说明,以便让关系型数据库真正的保持完整性。

我的上一篇MySQL笔记~

【MySQL】表的操作和数据类型_柒海啦的博客-CSDN博客

【MySQL】表的约束_第1张图片

 

目录

1.空属性

2.默认值

3.列描述

4.补零

5.主键

6.自增长

7.唯一键

8.外键


1.空属性

        每个数据类型没有加约束的话,默认为空属性。即可以不插入NULL。

        空属性为NULL,不可为空属性为NOT NULL。

        需要注意的是,实际开发中,数据为空时无法参与计算的,所以经可能的保证字段不为空。

【MySQL】表的约束_第2张图片

        创建两表后,可以查看其null属性:

【MySQL】表的约束_第3张图片

         插入的话就可以发现t1表可以插入NULL值,t2表不可插入NULL值哦~

2.默认值

        如果不输入数据,会自动填入默认数据的属性。

default 默认值;

        需要注意,默认值的生效需要在插入的时候不显示对其插入即可。(即在values前的属性指定中不显示表示其属性)

【MySQL】表的约束_第4张图片 

        在对t4表插入实例的时候,想要默认值id生效,不对其显示插入即可:

 

        另外,针对于not null和default这两个约束条件,是可以并存的。如果不是显示插入的话,默认值就会进行生效。如果显示插入,那么not null的存在是无法插入NULL值的。

【MySQL】表的约束_第5张图片  【MySQL】表的约束_第6张图片

3.列描述

comment '描述字段';

        没有特殊的含义,可以通过show create table 表名;进行查看,用于程序员做属性结构时候的批注。

【MySQL】表的约束_第7张图片

4.补零

int(n) zerofill......;

        首先,适用于整数类型。对于整数类型后面的()来说(比如tinyint(n)、int(n)、bigint(n)),只有加上zerofill才会生效,表示在指定宽度内,如果没有填充完会使用0进行填充。由于全用0填充话,是无法使用负数的,所以使用zerofill会自动设置为unsigned无符号类型的。

        如果输入超出长度的话则不会填充额外的0.

【MySQL】表的约束_第8张图片 

【MySQL】表的约束_第9张图片 

 

5.主键

primary key;

primary key(...);

        当我们想要一个表中能够区别元组(记录)的一个属性或者属性组中的其中一个,就可以成为主键。其中符合主键只能使用第二行进行定义,对于符合主键来说,其中的任何一个都不能作为主键(也就是说任何一个非真子集均不可唯一区分记录,只有属性组合在一起才能表示记录的完整性)

        主键通常会自己带上的限制:记录唯一性+非NULL。

        需要注意,一个表最多一个主键,否则没有。

        我们为什么需要主键?

1.查找的时候确定唯一性

2.插入的时候不能出现重复的数据。

3.改的时候确定一个唯一的记录。

4.删的时候确定一个唯一的记录。

        也就是说我们需要找到一个唯一的指定记录即可。

【MySQL】表的约束_第10张图片

        另外,对于DDL语言中,我们可以使用alter进行删除主键和添加主键。

-删除主键:

alter table 表名 drop primary key;  -- 直接丢弃即可

 -添加主键:

alter table 表名 add primary key(属性组);

        对于添加主键需要特别注意。因为添加主键的话,可能是由于前面表的结构没有定义完整,可能中间插入了很多数据。如果对于此主键属性来说,里面的数据不满足主键的条件的话就很容易出错,这样就会很麻烦。

 

6.自增长

auto_increment;

        自增长又被称为逻辑主键,通常配合主键一起使用。

        加上此约束条件的属性,如果不主动赋值,会从1开始,向后逐渐增加(给此列添加值)。如果更新值,之后会以此属性的最大值进行更新。实际上,此特性取决于在create的时候,会在表结构的外面增加变量auto_increment=? 当插入一个值后会跟新为下一个值默认的值。

        注意:

    1.如果没有主键,必须此列是主键。primary key
    2.此时在扩展就会发现自动增长 auto_increment;
    3.插入的时候,此列就完全可以不用管了。不用显示指明插入
    4.插入后,使用show create table test;  查看,会发现后面属性会加上) auto_increment=n;// 此时自动会维护一个计数器。
    5..如果主动插入自然是可以进去的。可以显示指明数据(不冲突即可)。
    6..如果显示插入后,后续不指定的话,会从之前显示指定插入的最大值id + 1.因为显示插入的时候,计数器会进行维护的。
    7.自然可以自己设置默认计数器,在creat()auto_increment=num;进行设计即可。

    8.注意整张表只能存在一个auto列,并且必须被定义为唯一属性(设计为主键的话就是primary,否则就是unique唯一约束属性,后面会讲)

    9.auto_increment必须设置为非负整数

【MySQL】表的约束_第11张图片

         创建只有一列的primary key自增长属性。

【MySQL】表的约束_第12张图片

         可以自己在create的时候设置auto_increment:

【MySQL】表的约束_第13张图片 

         后续第一次默认插入果然自动赋值为100了,后续就会从100或者插入的最大值开始相加。

7.唯一键

unique;

        唯一键很简单,就是在对于此属性约束条件中的数据来说,每一个都是独一无二的。这点和primary key类似,唯一不同的就是它可以为空

【MySQL】表的约束_第14张图片

        现实中,一个记录的很多属性具有很多唯一性的值。但是此时并没有设置为主键。而主键只是在众多具有唯一性的属性列中被选择成为主键而已,而其他字段的唯一性,也要保证其的唯一性。由于主键只能由一个,mysql提供了一种保证数据唯一性的方案。
        主键为了保证在查找的时候,找到唯一的一条记录。
        唯一键:更多是保证在表中,各个不同的值,一定在mysql层面也要保证其的唯一性。当然,如果也设置约束not null,此时约束方面就和主键一样了primary key;

8.外键

foreign key () references 主表(列)

        对于关系型数据库,自然需要建立表和表之间的参照关系。

        比如,在学校中成绩表就要和学生表进行对应起来。成绩表中出现的学生名字必须参照于学生表中出现过的学生名字,不可错误或者没有。所以,此时对于这两张表来说,成绩表中的学生属性就是一个从表中的属性,学生表中的学生是主表中的唯一限制的属性

        对于主表来说,此属性必须是primary key或者unique约束条件。(参照必须准确可靠)

        那么此时,外键所组成的关系就是有关系 + 有约束 = 外键约束。能够保证表和表数据完整性和一致性。对于外键来说,也是可以null,这一点也和主键不一样。

【MySQL】表的约束_第15张图片

 

你可能感兴趣的:(MySQL,mysql,数据库,sql)