这里只 谈自己理解的内容,可能不全面,大家看看就好
外键的作用应该是为了保护数据的完整性,我们都知道,在关系型数据库里往往我们需要把数据存在不同的表里面, 这样才能形成完整的数据,
这里举个老生常谈的例子:
我这里有两张表,分别是
表A:班级表
表B:学生表
班级表 A:
班级ID(主键) | 班级名称 |
---|---|
101 | 三年级一班 |
102 | 三年级二班 |
学生表B:
学号(主键) | 姓名 | 班级ID |
---|---|---|
202100001 | 小明 | 101 |
202100002 | 张大宝 | 102 |
我们可以看到 每个学生都属于一个班级,学生表里面一个字段存着班级表的主键代表学生的班级
假如没有设置外键
这时我们解散了班级 三年级一班 对应操作就是删除了班级ID为101
的数据
那么我们看学生表里面是不是还存班级ID? 这肯定是我们不愿看到的,现实中也不会存在有哪个学生不存在班级了对不对?
设置外键
设置外键要对表B设置,外键字段为班级ID
被引用的表(父)选择表A,被引用的字段选择表A的 班级ID
navicat里面设置外键的界面大家参考一下,非本示例:

action有下面几种选择:

1. cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
2. set null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null
3. No action方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
4. Restrict方式
同no action, 都是立即检查外键约束
5. Set default方式
父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别
如果选择删除时为 CASCADE
那么删除了班级表班级数据时,班级下所有的学生信息都会被同步删除
如果选择删除时为。NO ACTION 或者 REWSTRICT
那么删除班级表数据时,会立刻检查学生表有没有绑定了该班级的学生,如果有的话会提示不能删除的:

注意: update/delete 可以分别设置不同的action哦
扩展资料:
No action和Restrict有何不同
网友评论