外键:表与表之间的关系,分为主表(父表,被关联表)和从表(子表,关联表)

建立外键:constraint 键名 foreign key(字段) references 主表(字段)

create table dep(id int primary key auto_increment,part char(20) unique,info char(20) unique
);create table emp(id int primary key auto_increment,name char(20),age int,dep_id int,constraint fk_dep foreign key(dep_id) references dep(id)#dep和emp两张表生成外键fk_dep,dep中的id和emp中的dep_id形成关联on delete cascade #同步删除on update cascade #同步更新
);insert dep(part,info) values("公关部","老男孩公关有限部门"),("IT部","老男孩IT有限部门"),("销售部","老男孩销售有限部门"),("财务部","老男孩财务有限部门");insert emp(name,age,dep_id) values("alex",18,1),("wusir",30,2),("evaj",16,3),("mjj",25,4),("egon",24,4),("yhr",18,2);既然dep表和emp表已经关联,而且dep表是主表,那么我们删除主表中的东西,从表对应的东西也会跟着消失
delete from dep where id = 2;
select * from dep; dep中id为2的记录被删除
select * from emp; emp中dep_id为2的记录全被删除

小练习:

将班级表与学生表,老师表与课程表分别建立外键

create table class(cid int primary key auto_increment,caption char(20)
);create table student(sid int primary key auto_increment,sname char(20),gender enum("男","女") default "男",class_id int,constraint fk_studnet foreign key(class_id) references class(cid)on delete cascadeon update cascade
);insert class(caption) values("三年一班"),("一年三班"),("三年一班");insert student66(sname,gender,class_id) values("钢蛋","女",1),("铁锤","女",1),("山炮","男",2);delete from class where cid = 1;
select * from class;
select * from student;   我以通过查看更改后的表的记录来判断外键是否建立成功
create table teacher(tid int primary key auto_increment,tname char(10)
);create table course(cid int auto_increment primary key,cname char(10),teacher_id int,constraint fk_course foreign key(teacher_id) references teacher(tid)on delete cascadeon update cascade
);insert teacher(tname) values("波多"),("苍空"),("饭岛");
insert course(cname,teacher_id) values("生物",1),("体育",2),("物理",3);
外键的变种: 一对一,多对一

表与表之间的关系的分析方法:

假设我们现在有两张表,然后设一个表为左表,一个表为右表
条件1:左表的一条记录对应右表的多条记录
条件2:右表的一跳记录对应左表的多条记录如果条件1和条件2有一个成立,则这两个表的关系为:一对多如果条件1和条件2都成立,则这两个表的关系为:多对多如果条件1和条件2都不成立,则这两个表的关系为:一对一
1.多对多:

作者和书,一个作者可以写很多书,一本书也可以由很多作者共同完成
create table book(id int primary key auto_increment,name varchar(20)
);create table author(id int primary key auto_increment,name varchar(20)
);create table author_to_book(id int not null unique auto_increment,author_id int not null,book_id int not null,constraint fk_author foreign key(author_id) references author(id)on delete cascadeon update cascade,constraint fk_book foreign key(book_id) references book(id)on delete cascadeon update cascade,primary key(author_id,book_id)
);
insert author(name) values("egon"),("alex"),("wusir"),("yuanhao");
insert book(name) values("python全栈开发"),("linux高级运维"),("爬虫技术"),("web前端");
insert author_to_book(author_id,book_id) values(1,1),(1,2),(2,1),(3,1),(4,4),(4,3);
2.一对一:

create table user(id int primary key auto_increment,name char(20)
);create table blog(id int primary key auto_increment,url char(20),user_id int unique,constraint fk_user foreign key(user_id) references user(id)on delete cascadeon update cascade
);
insert user(name) values("alex"),("wusir"),("egon"),("mjj");
insert blog(url,user_id) values("www.cnblogalex.com",1),("www.cnblogwusir.com",2),("www.cnblogegon.com",3),("www.cnblogmjj.com",4);

9.foreign key(外键)相关推荐

  1. 零基础带你学习MySQL—foreign key 外键(二十六)

    零基础带你学习MySQL-foreign key 外键(二十六) -- 外键演示 -- 创建 主表 my_class CREATE TABLE my_class ( id INT PRIMARY KE ...

  2. mysql一对一外键约束_MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表...

    我们在同一数据库创建的表时候,很多时候会出现相同数据的冗余问题,也就是说几个id会有一个或者同n个相同字段,这样就导致数据表结构数据重复冗余, 冗余还无所谓,关键是如果我要改其中一个相同的字段信息,其 ...

  3. mysql foreign key 设置_mysql foreign key(外键) 说明与实例

    一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强.关于完整性,关连性 ...

  4. MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表

    阅读目录 一.引言: 二.一对多(foreign key) 三.多对多: 四.一对一: 五.修改表: 六.复制表: 摘要: 外键 一对多 外键 多对多 外键 一对一 一.引言: 我们在同一数据库创建的 ...

  5. 【若依(ruoyi)】quartz.sql 脚本重新导入时,遇到因foreign key外键无法删除错误#1217

    目录 前言 问题原因 解决办法1:先删除外键 解决办法2:禁用外键约束 前言 若依(ruoyi) 4.2 quartz.sql 脚本重新导入,遇到错误#1217 问题原因 在某些表上存在外键.重新导入 ...

  6. 【MYSQL】foreign key 外键约束(详解)

    外键是关联不同表之间的一个联接,比如我们现在有两张表: 那么如何设置外键呢? mysql> create table class(classId int primary key auto_inc ...

  7. python设置mysql外键_python基础教程之MySQL数据库之-foreign key 外键(一

    今日重点:外键 一对多 多对多 一对一 -------------------------------------------------------------------------------- ...

  8. mysql外键约束案例_SQLServer FOREIGN KEY外键约束讲解及使用实例

    FOREIGN KEY约束添加规则 1.外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列. 2.如果在 FOREIGN KEY 约束的列中输入非 NU ...

  9. mysql foreign key 用法_mysql foreign key(外键) 说明与实例

    一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强.关于完整性,关连性 ...

最新文章

  1. 脑力25岁开始走下坡路?百万人数据证实:60岁以后才下降|Nature子刊新研究
  2. C#如何得到运行中和杀死运行中的进程?
  3. Python实现Newton和lagrange插值
  4. 一、MySQL日志与备份
  5. Prufer序列相关
  6. Modbus协议栈开发笔记之八:Modbus ASCII Master开发
  7. 小心!你家的 IoT 设备可能已成为僵尸网络“肉鸡”
  8. spring+mybatis+springMVC+redis缓存+mysql+bootstrap+异步提交----联系人小demo
  9. YangTools从YANG生成Java类(Maven)
  10. 标准C字符和字符串函数
  11. 指定JDK版本运行Tomcat
  12. 漏斗模型被营销大师们玩烂了
  13. 数据结构——线性表的链式存储
  14. 微信小程序设置字体加粗
  15. 小程序游戏开发一般多少钱?游戏小程序开发制作
  16. 运营方法 - 运营的思考方法
  17. JAVA图片裁剪工具类
  18. 杭电计算机学院2019年奖学金,关于计算机学院2019-2020学年国家励志奖学金评选的通知...
  19. 卸载nginx 并重新安装
  20. 哈夫曼树:HDU5884-Sort(队列、哈夫曼树)

热门文章

  1. 自媒体免费编辑工具竞品分析 135编辑器乐观号媒号通三大功能优劣报告
  2. PPT制作 ---------插入图片背景颜色与模板的背景颜色不一致
  3. C语言 输出Sn = a + aa + aaa + aaaa + ······
  4. 阿里云ECS服务器搭建Mysql数据库
  5. 2019年6月1日第十四周UML项目日志
  6. java中事件监听是什么意思_Java的事件监听器学习心得
  7. 计算机硬盘多少克,人的大脑记忆能力相当于电脑多少G的硬盘?真相出乎你意料!...
  8. Scratch软件编程等级考试二级——20210320
  9. php重定向下载地址,用PHP强制下载然后重定向
  10. 英伟达RTX 4070最新测评来了!光追效果更棒,但仅限于2k游戏