![b002db3fc4ef4227525abe6d020ccd25.png](https://i-blog.csdnimg.cn/blog_migrate/a147dbc58b4735926f1ccff9daf21f19.jpeg)
第三节DDL和DML
3.1 外键约束
外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。举个例子:如果想要表示学生和班级的关系,首先要有学生表和班级表两张表,然后学生表中有个字段为stu_clazz(该字段表示学生所在的班级),而该字段的取值范围由班级表中的主键cla_no字段(该字段表示班级编号)的取值决定。那么班级表为主表,学生表为从表,且stu_clazz字段是学生表的外键。通过stu_clazz字段就建立了学生表和班级表的关系。
![4788bc414c1304f3113fec70998407d3.png](https://i-blog.csdnimg.cn/blog_migrate/7a5941cb9b39f4d1cf99db6b2260e7c6.png)
【示例5】表的外键约束
--
3.2 DQL和DML更多操作
【示例6】DML更多操作
select
从最终的结果来看,虽然使用TRUNCATE操作和使用DELETE操作都可以删除表中的全部记录,但是两者还是有很多区别的,其区别主要体现在以下几个方面:
(1)DELETE为数据操作语言DML;TRUNCATE为数据定义语言DDL。
(2) DELETE操作是将表中所有记录一条一条删除直到删除完;TRUNCATE操作则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,TRUNCATE操作的效率更高。
(3)DELETE操作可以回滚;TRUNCATE操作会导致隐式提交,因此不能回滚(在第十章中会讲解事务的提交和回滚)。
(4)DELETE操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”);截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。DELETE操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;TRUNCATE操作则会重新从1开始自增。
本节作业
1. 什么是外键,作用是什么
2. 外键的删除更新策略有哪些
3. 根据如下数据库表信息,使用SQL完成建表语句,并分别添加3条测试数据
![ad2d5e28005abd1c5d530d664f71d69e.png](https://i-blog.csdnimg.cn/blog_migrate/de6725a0fdb1a546196164d2bf555480.png)
![84b9109e38af461b1f7c66a4d79691dd.png](https://i-blog.csdnimg.cn/blog_migrate/de2584dd27ee6784d9fca5c5503c0715.png)