09-Mysql数据库----外键的变种
本节重点:
- 如何找出两张表之间的关系
- 表的三种关系
一、介绍
因为有foreign key的约束,使得两张表形成了三种了关系:
- 多对一
- 多对多
- 一对一
二、重点理解如果找出两张表之间的关系
分析步骤: #1、先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)#2、再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)#3、总结: #多对一: 如果只有步骤1成立,则是左表多对一右表 如果只有步骤2成立,则是右表多对一左表#多对多 如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系#一对一: 如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可
三、表的三种关系
(1)书和出版社
一对多(或多对一):一个出版社可以出版多本书。看图说话。
关联方式:foreign key
create table press(id int primary key auto_increment,name varchar(20) );create table book(id int primary key auto_increment,name varchar(20),press_id int not null,constraint fk_book_press foreign key(press_id) references press(id)on delete cascadeon update cascade );# 先往被关联表中插入记录 insert into press(name) values ('北京工业地雷出版社'), ('人民音乐不好听出版社'), ('知识产权没有用出版社') ;# 再往关联表中插入记录 insert into book(name,press_id) values ('九阳神功',1), ('九阴真经',2), ('九阴白骨爪',2), ('独孤九剑',3), ('降龙十巴掌',2), ('葵花宝典',3) ;查询结果: mysql> select * from book; +----+-----------------+----------+ | id | name | press_id | +----+-----------------+----------+ | 1 | 九阳神功 | 1 | | 2 | 九阴真经 | 2 | | 3 | 九阴白骨爪 | 2 | | 4 | 独孤九剑 | 3 | | 5 | 降龙十巴掌 | 2 | | 6 | 葵花宝典 | 3 | +----+-----------------+----------+ 6 rows in set (0.00 sec)mysql> select * from press; +----+--------------------------------+ | id | name | +----+--------------------------------+ | 1 | 北京工业地雷出版社 | | 2 | 人民音乐不好听出版社 | | 3 | 知识产权没有用出版社 | +----+--------------------------------+ 3 rows in set (0.00 sec)
书和出版社(多对一)
(2)作者和书籍的关系
多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多。
看图说话。
关联方式:foreign key+一张新的表
# 创建被关联表author表,之前的book表在讲多对一的关系已创建 create table author(id int primary key auto_increment,name varchar(20) ); #这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了 create table author2book(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) ); #插入四个作者,id依次排开 insert into author(name) values('egon'),('alex'),('wusir'),('yuanhao');# 每个作者的代表作 egon: 九阳神功、九阴真经、九阴白骨爪、独孤九剑、降龙十巴掌、葵花宝典 alex: 九阳神功、葵花宝典 wusir:独孤九剑、降龙十巴掌、葵花宝典 yuanhao:九阳神功# 在author2book表中插入相应的数据insert into author2book(author_id,book_id) values (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (2,1), (2,6), (3,4), (3,5), (3,6), (4,1) ; # 现在就可以查author2book对应的作者和书的关系了 mysql> select * from author2book; +----+-----------+---------+ | id | author_id | book_id | +----+-----------+---------+ | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 1 | 3 | | 4 | 1 | 4 | | 5 | 1 | 5 | | 6 | 1 | 6 | | 7 | 2 | 1 | | 8 | 2 | 6 | | 9 | 3 | 4 | | 10 | 3 | 5 | | 11 | 3 | 6 | | 12 | 4 | 1 | +----+-----------+---------+ 12 rows in set (0.00 sec)
作者与书籍关系(多对多)
(3)用户和博客
一对一:一个用户只能注册一个博客,即一对一的关系。看图说话
关联方式:foreign key+unique
#例如: 一个用户只能注册一个博客#两张表: 用户表 (user)和 博客表(blog) # 创建用户表 create table user(id int primary key auto_increment,name varchar(20) ); # 创建博客表 create table blog(id int primary key auto_increment,url varchar(100),user_id int unique,constraint fk_user foreign key(user_id) references user(id)on delete cascadeon update cascade ); #插入用户表中的记录 insert into user(name) values ('alex'), ('wusir'), ('egon'), ('xiaoma') ; # 插入博客表的记录 insert into blog(url,user_id) values ('http://www.cnblog/alex',1), ('http://www.cnblog/wusir',2), ('http://www.cnblog/egon',3), ('http://www.cnblog/xiaoma',4) ; # 查询wusir的博客地址 select url from blog where user_id=2;
用户和博客(一对一)
转载于:https://www.cnblogs.com/dalaoban/p/9562724.html
09-Mysql数据库----外键的变种相关推荐
- mysql数据库 外键约束
外部关键字 在以后我们统一将外部关键字叫做外键,外键就是另一张表中的主键. 问:外键有啥用啊? 答:外键的主要作用就是保持数据的一致性,完整性. 再问:怎么保证的呢? 答:看图. 如图有两张表,cla ...
- navicat --mysql数据库外键约束及其外键策略
一,什么是外键约束 外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的.外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性. 外键是指 ...
- mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作
1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...
- wamp mysql外键设置_数据库外键是什么意思
数据库外键是什么意思? 外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列.通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接.这个列就成为第二个表的外键. 当创建或更 ...
- mysql创建外键级联更新_MySQL中利用外键实现级联删除、更新
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作 ...
- MySQL的外键约束
一.MySQL外键 外键表示一个表中的一个字段被另一个表中的一个字段引用.外键对相关表中的数据造成了限制,使MySQL的能够保持参照完整性.只有InnoDB类型的表才可以使用外键. 1.外键的好处 可 ...
- 数据库 外键 优缺点_不同数据格式的优缺点:键值与元组
数据库 外键 优缺点 by Hieu Nguyen (Jack) 由Hieu Nguyen(Jack) 不同数据格式的优缺点:键值与元组 (The pros and cons of different ...
- mysql 设置外键
数据库 mysql 建立外键的前提:本表的列必须与外键类型相同(外键 必须是外表主键). 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) ...
- mysql创建外键级联更新_MySQL使用外键实现级联删除与更新的方法
本文实例讲述了MySQL使用外键实现级联删除与更新的方法.分享给大家供大家参考,具体如下: MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时 ...
- python 全栈开发,Day62(外键的变种(三种关系),数据的增删改,单表查询,多表查询)...
一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出 ...
最新文章
- 银光中国网免费Silverlight空间Web Service部署方法
- 发布订阅模式 仿写Vue事件监听手写js实现
- 应用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap space)
- 深度剖析RPC框架的核心设计
- Max retries exceeded with URL报错小记
- Java中数学计算的相关方法
- java web fileupload_javaweb 文件上传(fileupload) 下载
- 在C#中使用DevExpress中的ChartControl实现极坐标图
- 发动机压缩比怎么计算公式_精准的发动机压缩比计算方法与流程
- Hightopo 受邀参加第二十三届中国国际高新技术成果交易会
- flac编码音频转alac编码(使用ffmpeg)
- backdrop-filter: blur() safari 浏览器 无效 解决
- Makerbase_ODrive常见驱动问题及解决
- OSWE 尾篇 考试的方法论
- windows 组策略
- java基础练习_Java基础练习题
- IBM z15揭开面纱,多项业界首创技术护航混合多云安全
- wordpress创建_如何在WordPress中创建问卷(简易方式)
- 圣斗士星矢正义传说服务器维护,圣斗士星矢正义传说最佳运营攻略
- Jvav 调用 Conflux 智能合约
热门文章
- python 实现简单画板_Python图像处理之简单画板实现方法示例
- linux下查看进程与线程
- java输出日期_java输出日期时间
- 戴尔optiplex3020主板接线_戴尔XPS 13 2020上手,12999元的高端精致怪,让苹果也很有压力!...
- maker 预测_Nature | 计算机首次预测天然产物逆合成路线—与人类不相上下!
- linux有名管道 复用,Linux进程间通信(九)---综合实验之有名管道通信实验
- mysql 循环语句语法_MySQL循环语句之while循环测试
- 翻译: 构建基于卡尔曼滤波器的 IMU 用速度数据改进 IMU 姿态估计
- 翻译:自动驾驶相关术语的分类和定义Taxonomy and Definitions for Terms Related to On-Road Motor Vehicle Automated
- swift5 修改Accessibility order读取的顺序