Mysql 外键的作用以及怎么设置外键

这里只 谈自己理解的内容,可能不全面,大家看看就好
外键的作用应该是为了保护数据的完整性,我们都知道,在关系型数据库里往往我们需要把数据存在不同的表里面, 这样才能形成完整的数据,

这里举个老生常谈的例子:
我这里有两张表,分别是
表A:班级表
表B:学生表

班级表 A:

班级ID(主键) 班级名称
101 三年级一班
102 三年级二班

学生表B:

学号(主键) 姓名 班级ID
202100001 小明 101
202100002 张大宝 102

我们可以看到 每个学生都属于一个班级,学生表里面一个字段存着班级表的主键代表学生的班级

如果没有设置外键

这时我们解散了班级 三年级一班 对应操作就是删除了班级ID为101的数据
那么我们看学生表里面是不是还存班级ID? 这肯定是我们不愿看到的,现实中也不会存在有哪个学生不存在班级了对不对?

设置外键

设置外键要对表B设置,外键字段为班级ID 被引用的表(父)选择表A,被引用的字段选择表A的 班级ID
navicat里面设置外键的界面大家参考一下,非本示例:

Mysql 外键的作用以及怎么设置外键

action有下面几种选择:

Mysql 外键的作用以及怎么设置外键

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
那么删除班级表数据时,会立刻检查学生表有没有绑定了该班级的学生,如果有的话会提示不能删除的:

Mysql 外键的作用以及怎么设置外键

注意: update/delete 可以分别设置不同的action哦

扩展资料:
No action和Restrict有何不同

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容