效果展示
背景
想要让 “字段” 的值来源于另一张表,也就是约束此字段的值。
必备知识点
想要做到这个效果,你需要先认识外键约束
外键约束文章连接
外键产生的行为(删除/更新行为)
添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:
行为 | 说明 |
---|---|
no action | 当在父表(主表)中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 RESTRICT 一致) 默认行为 |
restrict | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 NO ACTION 一致) 默认行为 |
cascade | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。 |
set null | 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。 |
set default | 父表有变更时,子表将外键列设置成一个默认的值 (Innodb不支持) |
实操Navicat建立外键约束
举个例子,表A的ParamName列、ZhParamName的值都来源于表B的ParamName列,那么提供选项值的表B我们称为主表,表A称为副表。
(主表)表B:
为了能够给表A提供选项,需要在表A的“设计表”页面为表A添加外键
列 | 解释 |
---|---|
名字 | 随便定义,你喜欢就好 |
栏位 | 要给(副表)表A提供选项的列 |
被参考表 | 这里填写(主表)表B的名字 |
参考栏位 | 填写表B的哪个列跟“栏位”的列绑定 |
删除时 | 这个根据你的需要来写,一般删除时选择RESTRICT,代表的意思是(主表)删除内容时检查该记录是否有对应外键,如果有则不允许删除 |
更新时 | 一般填CASCADE,表示主表更新了该内容,如果该内容有外键,那么副表的相关内容也跟着一起更新 |
实操效果
当你回到(副表)表A后,能看到值被约束了,有选项