mysql高级

今日目标

1,约束

image-20210724104749122

上面表中可以看到表中数据存在一些问题:

针对上述数据问题,我们就可以从数据库层面在添加数据的时候进行限制,这个就是约束。

1.1 概念

1.2 分类

1.3 非空约束

1.4 唯一约束

1.5 主键约束

1.6 默认约束

1.7 约束练习

根据需求,为表添加合适的约束

上面一定给出了具体的要求,我们可以根据要求创建这张表,并为每一列添加对应的约束。建表语句如下:

通过上面语句可以创建带有约束的 emp 表,约束能不能发挥作用呢。接下来我们一一进行验证,先添加一条没有问题的数据

执行结果如下:

image-20210724114548170

从上面的结果可以看到,字段 id 不能为null。那我们重新添加一条数据,如下:

执行结果如下:

image-20210724114805350

从上面结果可以看到,1这个值重复了。所以主键约束是用来限制数据非空且唯一的。那我们再添加一条符合要求的数据

执行结果如下:

image-20210724115024106

执行结果如下:

image-20210724115149415

从上面结果可以看到,ename 字段的非空约束生效了。

执行结果如下:

image-20210724115336916

从上面结果可以看到,ename 字段的唯一约束生效了。

执行完上面语句后查询表中数据,如下图可以看到王五这条数据的bonus列就有了默认值0。

image-20210724115547951

==注意:默认约束只有在不给值时才会采用默认值。如果给了null,那值就是null值。==

如下:

执行完上面语句后查询表中数据,如下图可以看到赵六这条数据的bonus列的值是null。

image-20210724115826516

重新创建 emp 表,并给id列添加自动增长

接下来给emp添加数据,分别验证不给id列添加值以及给id列添加null值,id列的值会不会自动增长:

 

1.8 外键约束

1.8.1 概述

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

如何理解上面的概念呢?如下图有两张表,员工表和部门表:

image-20210724120904180

员工表中的dep_id字段是部门表的id字段关联,也就是说1号学生张三属于1号部门研发部的员工。现在我要删除1号部门,就会出现错误的数据(员工表中属于1号部门的数据)。而我们上面说的两张表的关系只是我们认为它们有关系,此时需要通过外键让这两张表产生数据库层面的关系,这样你要删除部门表中的1号部门的数据将无法删除。

1.8.2 语法

 

1.8.3 练习

根据上述语法创建员工表和部门表,并添加上外键约束:

添加数据

此时删除 研发部 这条数据,会发现无法删除。

删除外键

重新添加外键