6.3.2 关联表操作
从前面的学习可知,实体之间具有一对一、一对多和多对多的联系,而具有关联的表中的数据,可以通过连接查询的方式获取,并且在没有添加外键约束时,关联表中的数据插人,更新和删除操作互不影响。但是对于添加了外键约束的关联表而言,数据的插人、更新和删除操作就会受到一定的约束。接下来对具有外键约束关系的关联表操作进行详细讲解。
1.添加数据
一个具有外键约束的从表在插人数据时,外键字段的值会受主表数据的约束,保证从表插人的数据必须符合约束规范的要求。如从表外键字段不能插人主表中不存在的数据例如,主表 department 中未添加数据时,向 employees 表中插人一条记录(名称为 Tom的用户所属部门编号为 3)。具体 SQL语句及执行结果如下。

从以上的执行结果可知,从表外键字段插人的值必须选取主表中相关联字段已经存在的数据,否则就会报以上的错误提示信息。
下面为 department 表添加一条 id 值为 3,分类名为“研发部”的记录,然后再利用上述示例中的 SQL, 语句为 employees 表添加数据。具体 SQL,语句及执行结果如下。
从上述执行结果可知,在主表 department 中含有 id为3的部门信息后,从表 employees 中才能插人此部门的用户信息。
2.更新数据
对于建立外键约束的关联数据表来说,若对主表进行更新操作,从表将按照其建立外键约束时设置的 ON UPDATE参数自动执行相应的操作。例如,当参数设置为CASCADE时,如果主表发生更新,则从表也会对相应的字段进行更新。
下面对具有外键约束关系的 employees(从表)和 department(主表)进行操作,具体SQL语句及执行结果如下。

从以上的执行结果可知,仅将主表 department 中名为“研发部”的 id 修改为1后,从表employees 中的相关用户(Tom)的外键 dept id 也同时被修改为 1.
小提示:外键约束在使用时既有一定的优势,同时又会带来一定的问题,具体如下(1)优势。
·外键可节省开发量。
·外键能约束数据有效性,防止非法数据的插入(2)劣势。
·使用外键约束,会带来额外的开销,
·主表被锁定时,会引发从表也被锁定,
.删除主表的数据时,需先删除从表的数据,
·含有外键约束的从表字段不能修改表结构。
其中,关于锁的内容会在后面的章节中详细讲解,此处了解即可。
3.删除数据
同样地,对于已建立外键约束的关联数据表来说,若要对主表执行删除操作,从表将按照其建立外键约束时设置的 ON DELETE参数自动执行相应的操作。例如,当参数设置为RESTRICT 时,如果主表进行删除操作,同时从表中的外键字段有关联记录,就会阻止主表的删除操作。
下面对具有外键约束关系的 employees(从表)和 department(主表)进行操作,具体SQL 语句及执行结果如下,
从上述执行结果可知,在删除主表 department 中id等于1的记录时,由于从表employees 中含有部门编号等于1的用户信息,程序就会给出以上的错误提示信息。
此时,若要删除具有 ON DELETE RESTRICT 约束关系的主表记录时,一定要先删除从表中对应的数据,然后再删除主表中的数据。具体 SOL,语句及执行结果如下所示。
从上述的操作可知,关联表在删除操作时使用 DISTRICT 严格模式,主表中每条记录的删除,都要保证从表中没有相关记录的对应数据,这会对开发造成很大的不便。因此,对于添加外键约束的 ON DELETE 一般都使用 SET NULL,模式,即删除主表记录时,将从表中对应的记录设置为 NULL,同时要保证从表中对应的外键字段允许为空,否则不允许设置该模式,
6.3.3 删除外键约束
在实际开发中,根据业务逻辑的需求,需要解除两个表之间的关联关系时,就要删除外键约束。基本语法格式如下。
ALTER TABLE 表名 DROP FOREIGN KEY 外键名:
下面以解除员工表 employees 与部门表 department 之

最低0.47元/天 解锁文章
2093

被折叠的 条评论
为什么被折叠?



