MySQL表的约束

目录

1、空属性

2、默认值

3、列描述

4、zerofill

5、主键

6、自增长

7、唯一键

8、外键 


   

        我们上篇博客讲了数据类型,数据类型其中的约束很单一,我们还要额外的今天我们要讲述这几个约束:null/not null,default, comment, zerofill,primary key,auto_increment,unique key 。

1、空属性

        NULL,“”,0我们首先要理解下这三个的区别。

MySQL表的约束_第1张图片

        NULL就是空,没有任何数据。

        “”有数据,但是为空串。

        0为数字0。

案例:

        我们应该都见过班级表,第一,班级名称不能为空,要不不知道学生所在班级是什么;第二,班级所在地不能为空 ,不然学生去哪里上课。所以我们在建立班级表时,要注意设置约束。

MySQL表的约束_第2张图片

         在创建时class没有明确的约束不能为空,则在插入数据时可以为空。

MySQL表的约束_第3张图片

         不允许设为NULL,设置NULL则会报错。

MySQL表的约束_第4张图片

        但是‘’则可以插入,只是为空串,但不为NULL。 

        这种约束一旦建立就会倒逼程序员不能插入NULL。

2、默认值

        默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。      

案例:       

MySQL表的约束_第5张图片

        这时我们插入数据,age与gender列不插入数据就会显示默认数据。

MySQL表的约束_第6张图片

MySQL表的约束_第7张图片

         默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值。

        到这里,我有个疑问,我对一个列属性既设置not null 有设置default,在插入时我不插入数据,MYSQL会不会允许我这样的操作呢?      

MySQL表的约束_第8张图片

         从图上可知,当有默认值时尽管约束为not null,不插入数据,也会有默认值防止该值为null。

        default vs NULL:

       default:在我们不显示的向指定列中插入,default自动会起效果。

       NULL:当我们显示的向一列插入,如果插入的是正常值,就正常工作,否则,插入NULL,NOT NULL就约束你不让你插入。

3、列描述

        列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解。      

MySQL表的约束_第9张图片

MySQL表的约束_第10张图片

         

        这里讲的是约束为什么会提到注释,其实这里的注释是用来约束程序员本身的,让程序员在插入数据前可以起到参考作用。

4、zerofill

        zerofill我们通过实验得出结论。

MySQL表的约束_第11张图片

        我们会发现int后跟了个括号其中写了11,这里的int是4字节大小,为什么要跟11,其实有了zerofill的帮助,11才有意义。

MySQL表的约束_第12张图片

        首先,先插入个数据,再改变列属性。

MySQL表的约束_第13张图片

        我们会发现值1,前多了10个零。

MySQL表的约束_第14张图片

        刚刚int默认是int(11),现在我们改成int(6),发现值1,前多了5个零。

        这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是6),自动填充0。

        但是这只是显示的效果,其实mysql在存储时还是存储1。        

        这里揭晓上文的答案,int后跟11,是表示显示的位数,带上zerofill就会显示相应的位数。

        这究竟有什么用呢?加不加上都无所谓。比如,当该表格中会插入很多数据,但是数字的之间的差距很大,想让表格更好看一点,更加整齐,可以选择zerofill。

5、主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个。主键所在的列通常是整数类型。

案例:

MySQL表的约束_第15张图片

        插入数据:

MySQL表的约束_第16张图片

        不能重复,不能为空。

        一张表只能有一个主键:

         主键可以在建表之后追加:

MySQL表的约束_第17张图片

         删除主键:

MySQL表的约束_第18张图片

        复合主键:

        将多个字段 作为主键,可以使用复合主键。

MySQL表的约束_第19张图片

        插入数据:

MySQL表的约束_第20张图片

        不允许混合主键同时相同,允许部分不同。 

6、自增长

        auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

         自增长的特点: 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值) 自增长字段必须是整数 一张表最多只能有一个自增长。

案例:

        所以说,自增长必须和主键相配合。也就是说自增长的字段一定是主键。

MySQL表的约束_第21张图片

        既然是自增长,我们可以不插入数据。

MySQL表的约束_第22张图片

        至于mysql怎么知道下一次增加到什么数字呢?

MySQL表的约束_第23张图片

        mysql会存在一个字段记录数据。 

        当然我们也可以自己插入数据。 

MySQL表的约束_第24张图片

        当然我们也可以指定自增长的起点。

MySQL表的约束_第25张图片

7、唯一键

        一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以 解决表中有多个字段需要唯一性约束的问题。 唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

案例:

MySQL表的约束_第26张图片

        唯一键不允许数据重复。        

8、外键 

        外键用于定义主表和从表之间的关系,维护主表和从表的关系。外键约束主要定义在从表上,主表则必须是有主键约束或unique 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

案例:MySQL表的约束_第27张图片

        如果将班级表中的数据都设计在每个学生表的后面,那就会出现数据冗余,所以我们只要设计成让stu->class_id和myclass->id形成关联的关系=>外键约束.

         对上面的示意图进行设计:

        先创建主键表和从表:

MySQL表的约束_第28张图片

MySQL表的约束_第29张图片

MySQL表的约束_第30张图片

        我们可以看见约束的体现。 

        主表myclass中没有213班级,从表这时要插入213班级的同学,MySQL就会阻止插入。

        建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql 表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

        

               

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