1,概念
表中一定要有各种约束,通过约束,让我们来插入数据库中的数据是符合预期的。
约束本质是通过技术手段,倒逼程序员插入正确的数据;反过来,站在MySQL的角度来单,内部已经插进来的数据,都i是符合数据约束的数据。
约束的最终目标:保证数据完整性和可预期性
为了完成以上的所有目标,就需要除了数据类型自带的范围约束以外的更多约束。
2,空属性
在MySQL里,null表示没有而不是0,' '代表空串。
两个值:null(默认的)和not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办 法参与运算。
操作:在创建表后面加上not null;
可以看到,在创建元素的时候加了 not null,在查看表的时候Null列里就会显示NO。
那么插入操作:
可以看到,insert里不对加了空约束的值插入数据时系统会报错,当然可以插入空串;还有一个操作也无法插入数据:
3,默认值
默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。
例子:
可以看到,表中default这一列出现了值,接下来我们插入几个值测试一下:
可以看到,在我们不输入值的时候就会默认给我们输入缺省,在用户输入元素的时候,就会选择用户输入的元素插入。
可以看到,我给age设置了not null 和 default:
可以看到,就算加了not null 没对age指定插入时不会报错,且使用的时缺省值,但是指定对age插入空的话就会报错。
在我们日常使用中,not null和default是互相补充的。
not null 和 default 一般不需要同时出现,以为default本身默认值不会为空。
4,列描述
操作:comment + 内容
没有实际含义,更类似于我们平时写代码的注释:
5,zerofill
刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看text14表的建表语句:
可以看到int(11),这个代表什么意思呢?整型不是4字节码?这个11又代表什么呢?其实没有zerofill这个 属性,括号内的数字是毫无意义的。age和id列就是前面插入的数据,如下:
那么我们稍微改一下id的属性,在后面加上zerofill:
可以看到,在id加了zerofill的约束之后,在100前面会补零,其总位数就是11位,正好对上
int(11)的括号里的值,那么改完属性之后里面的100的值会不会发生改变?
可以用where查到,值是不会发生改变的。
那么zerofill的作用在哪里?
可以在固定的长度中让表的宽度保持一直以维持美观,当然如果插入的位数大于zerofill定义的位数,也可以成功插入,但是超过的位数会有图出:
6,主键
主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空 ,一张表中最多只能有一个 主键;主键所在的列通常是整数类型:
那么我们来插入数据测试一下:
可以看到,当我们插入重复的数据的时候,系统会拦截不给我们插入:
可以看到,也不能往里面插入空值.
那么如何去掉主键?
以为整个表里就一个主键,所以直接指明要删主键系统自动就会帮我们删除。
在删除了主键之后,我们就可对其进行插入重复值的操作:
那么如何插入主键?
可以看到,我们要把表内重复的数据和null清理了才可以插入主键。
7,复合主键
我们知道,一个表中主键只有一个,但是不意味着一个表的主键只能添加一列,这种多列主键的操作叫做复合主键。
操作:
可以看到key位置的id和course位置都有pri,现在我们对他插入测试:
这就是复合主键的使用方法。
8,主键子问题:自增长
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
可以看到,id在我们不插入值时他会固定增长,要是插入的值和表中id相同则会报错。
我们可以指定某个数字开始加一:
也可以在创建表时,在表的结尾写:auto_increment = 500来改想要的id起始值:
9,唯一键(可以为空)
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以 解决表中有多个字段需要唯一性约束的问题,除了可以为空,其他操作和主键相同,如果想让值不为空,可以加not null。
关键字:unique
那么我们来插入一下数值看看:
可以看到,插入的id不能重复,但是可以为空。
主键选择了某个元素为主键,这时如果其他值也有唯一性的时候,可以用唯一键来补充,唯一键与主键并不冲突,他们是相互补充的。
例如个人id和telphone(电话),都是唯一的。
10,外键
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
语法:foreign key (字段名) references 主表(列)
我们在进行复杂的表管理时,难免不了经常有表与表之间有精密的联系,这个时候我们可以用外键来相互对两张表进行相互约束:
接下来看案例:
我们可以看到,表与表之间存在某种关联,主表是calss,从表是student,这时我们可以使用外键命令来约束,一般外键写在从表:
那么我们来插入数据测试一下:
可以看到,在符合主表的条件下可以插入,但是不符合主表约束条件的不给插入
如果从表有数据,那么主表的相关的数据不能被删掉:
希望对你们有帮助。