约束,这个词到时十分易懂。
那数据库具体是约束什么的,不用想就是数据
所以通过约束
让数据库中的数据符合预期
这个是通过技术手段,倒逼用户插入合法数据
所以可以说凡是通过约束后插入的数据都是符合约束的。
非空很简单
就是说用户对该字段的数据不能插入空。
这里可以自己创建一个试试
这里会提示禁止插入空
类似以前Cpp中能见到的缺省值
就是字段的默认值
这里创建了一张表用来演示
这里对t2进行插入,带有默认值的t1则不插入
这里能看到t1果然被插入了10
这里要注意:
如果没有设置default,数据库会自己带上一个default null
这里我们来查看一下
这里用show create table table_name
可以查看数据表各个属性
这里能发现自带上了null
但是如果
设置了非空约束,那就不会设置default null。
这个comment,其实在以前博客中使用过。
这个主要的作用是给用户进行查看的
便于用户知道该字段的具体描述。
如果要查看描述:
用上面的show create table table_name
即可
这个约束其实就是填充零的作用。
这里就直接上手使用,使用后就明白了
这里创建一个zerofill约束的id
然后插入1
能发现结果自动被填充0了
但是这里可能有点疑问,数据库是如何判断填充多少个0的。
这里查看一下表结构:
这里我们可以看到id的约束多了个unsigned
所以要注意,设置zerofill的时候,同时也会将字段设置成unsigned类型
同时这里我们能看到int(10)
这个10,按道理来说不是int的大小
因为做整形的大小是固定的
所以这个10的作用就是专门为zerofill服务的
能看到上面1插入id后,填充的数量正好是10个。
主键约束
这里先解释一下主键约束存在的意义是什么
其实主键也没有这么难理解
它的作用可以看成是现实中的学号。
通过学号能找到一个学生的各种信息,成绩,家庭住址……
所以有了学号后,就方便通过学号对一个人的所有信息进行查找。
所以将一个字段设置成学号类似作用的主键,当然也要受到想学号一样的限制
这里也能想到学号的特点:
1.不能为空
只要是学生就要有学号,学号为空是没有意义的,除非你不是本校生
2.不能重复
一个学号代表的是一个学生的信息,所以学号不能重复。
所以被主键约束的字段数据具有非空,唯一的特点
同时要注意一个表只能有一个主键
这里我们知道主键是什么后,接下来就是学习如何对表进行主键的添加。
1.创建时:
直接在创建的字段后加上primary key
2.对创建完的表进行添加
alter table 表名 add primary key(字段名字);
这里主键添加错了,也可以进行删除的操作
alter table 表名 drop primary key;
前面提到了,我们说过表中只有一个主键
但是不代表一个主键只能添加给一列
所以可以将多行设置成主键,这样就变成了复合主键。
这个复合主键设置的两个字段可以相互不同,但是不能全部相同。
这里随便添加了几个数据。
这个是两个id和id_course两个主键
这个很符合我们现实中选课的方式:
一个人可以选多种课程,但是不能选重复相同的课
这个auto_increment也属于主键,只不过是给主键添加了一个自增长的属性。
这里我们可以来用一下。
这里能发现一个表中主键id有auto_increment属性。
这里先不管id,直接先随便插入几条数据
能发现这里的id,命名没有设置添加具体的数值,但是自己从1开始按序自增。
create table 表名(
id int unsigned primary key auto_increment
);
这里我们还可以设置auto_increment的增长初始值
create table table_name(
id int primary key auto_increment)auto_increment=500;
这里创建了一个表用来演示
这里能看到增长初始值变成了500
唯一键顾名思义,和主键的限制差不多,同样是非空,唯一
那这里可能有人不理解唯一键存在的意义,既然主键和唯一键的限制一样,为什么要有唯一键的存在
因为主键和唯一键存在的意义不一样
主键的作用和学号一样,希望通过唯一的学号来查到每一个学生的信息
一个表中只能有一个学号这样的存在,也就是说一个表只能有一个主键
但是还有很多字段需要用到非空,唯一这个的限制
比如说运动员表中:
运动员牌号作为了主键
那冠军和亚军季军也同样是不能有相同的获得者,但是冠军亚军已经不能是主键了。
这个时候唯一键就派上用场了。
字段名 字段类型 unique;
这个name后面的unique就是唯一键。
我们要学习外键,首先就要知道它的存在意义(作用)
简单来说外键的作用就是:
1.关联
2.约束
这里想一下:
用在两个表在业务上具有相关性,但是插入数据时却不受约束,这想想就会造成很大的问题
比如说:
这里有一个货物表:
同时有一个购买表:
这里能看到这个表插入了一个货物表中没有的货物。
这样肯定是不符合现实的要求了。
所以这个时候外键就闪亮登场了。
这里添加键的时候要注意:
1.外键约束定义在从表上
2.主表则必须有主键约束或unique约束
3.定义外键后,要求外键列数据必须在主表的主键列存在
alter table 从表 add foreign key(字段名) references 主表(字段名)
这里能看到添加外键约束失败,这是因为现有的数据中有冲突的数据
这里将图片删除后,就能正常进行添加了
这里我们同样还能对good_name添加外键。
这里添加完了以后
在从表purchase插入数据时就会进行检查,发现主表goods中没有的都会进行报错
只有符合主表中的内容才能进行插入。
这里想要删除外键约束
首先需要show查看约束的代名,
这里两个都是外键约束的代号
接下来通过这个代号就可以对外键约束进行删除
alter table purchase drop foreign key [外键代号]