一、空属性

创建一个班级的表,里面包含两个属性,一个是班级名,一个是班级教室,要上课这两个都不是空,所以设置not null约束,那么插入数据时就不能有空的:
这里报错为没有缺省值,是因为没有设置值时默认使用缺省值,而没有设置缺省值,缺省值默认为null,但是Null约束归定了不能为空,所以是报错没有设置缺省值;
Null约束管理的是真正插入数据了,若是有一个属性NUll是not null,那么就不能插入null;也就是说NUll触发约束时是显示插入数据时:
二、默认值

Null和default并不冲突 ,而是相互补充的;
涉及到Null时,用户插入数据,并且插入null或者合法数据;涉及到default时,用户没有插入数据时使用default,若是没有default报错;
当某一个属性的Null约束是not null而且没有设置default时,我们知道没有设置default时,默认值给null,但是此时是不允许插入null的,所以此时相当于没有设置default,就会报错。
三、列描述

四、zerofill
a后面是10,b后面是11(符号位),这些数字都是为了zerofill准备的,当设置了zerofill之后,查看数据就会格式化输,前面不够补0,若是zerofill比数据还要短,那么就显示原数据
比如插入(1,2),查询时就会显示(0000000001,0000000002)
插入(1000,2),但是zerofill是3,那么显示的还是(1000,002);
若zerofill字段小于数据长度呢?
五、主键
主键是表中的某一列(属性),这一列唯一标识了一个记录,比如学生的学号,唯一标识了这个学生的性别、年龄、成等等;
主键是唯一的,并且是不能为空的,一个表只能有一个主键;
###1、创建主键方式
在建立表时在属性后面增加 primary key字段进行约束
主键唯一并且主键值唯一
还能再建表之后再设立主键:alter table table_name add primary key(字段列表)
###删除主键:
alter table table_name drop primary key;
复合主键,就是一个表有多个不同的属性共同组成一个主键,这些属性被当作一个整体,唯一性体现也是整体的,就是说其中一个被改变时不影响,同样也不能为空;
复合主键创建的方式相同
插入数据时也不能插入空并且主键的属性整体不能相同
六、自增长
###定义:auto_increment,设置了自增长的属性列在进行插入数据时,若是没有给值,系统会默认给一个这个属性列中最大的值+1的值,得到一个新的不同的值;自增长通常配合主键一起使用作为逻辑主键。
###特点:设置了自增长约束的列必须是一个索引(key行有值)并且是整形类型的,自增长在一个表中只能出现一个。
这个值是会有记录的,每次记录的都是对应自增长中最大值+1,作为下一次插入没有给值得自增长值;
通过 函数 select last_insert_id() 查询上一次插入时的自增长值(批量插入后查询,查出的是第一个插入的值)
七、唯一键
unique key:所约束的属性列的各个值必须唯一,可以为空;
八、外键
foreign key(从表列)references 主表(主表列)
###定义:外键是两个表之间通过某一个属性之间进行的联系;外键约束定义在从表上,被约束的这列在主表中是主键或者唯一键;定义外键之后,从表这列被约束的数据要么是有合法值要么为null;外键的存在维护了完整性约束。
例子:一个学生表,包含学生的各种属性,其中有一个属性是班级id,若是在这个学生表中查看班级id就会有很多重复的,因为可以出现很多学生在同一个班级的情况;那么定义一个班级表,其中包含主键班级id和班级名;再将学生表中的班级id定义为外键,关联的是班级表的主键id,此时查看起来就会很方便;并且更重要的一点就是有了完整性约束,就是给学生表插入新数据时,插入的所属班级id的值不能是主表班级表中主键id不存在的值。
先创建主表:
再创建从表:
给主表插入数据,表示能收学生的班级号有哪些;再给学生表插入数据,合乎情理的是插入数据时对应班级号的一列班级表中id列存在的值或者是null表示还没有给这个学生分配班级:
实例:


不能插入外键关联主键中对应属性列中值不存在的