我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql-外键的三种关系

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql-外键的三种关系

介绍

因为有foreign key的约束,使得两张表形成了三种了关系:

多对一

多对多

一对一


重点理解如果找出两张表之间的关系

分析步骤:
#1、先站在左表的角度去找
是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)

#2、再站在右表的角度去找
是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

#3、总结:
#多对一:
如果只有步骤1成立,则是左表多对一右表
如果只有步骤2成立,则是右表多对一左表

#多对多
如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的
关系

#一对一:
如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右
表的基础上,将左表的外键字段设置成unique即可


表的三种关系

(1)书和出版社

  一对多(或多对一):一个出版社可以出版多本书。看图说话。

  关联方式:foreign key

blob.png


先创建主表press

mysql> create table press(id int primary key auto_increment,name varchar(20));

Query OK, 0 rows affected (0.09 sec)


再创建从表book

mysql> 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 cascade on update cascade);

Query OK, 0 rows affected (0.04 sec)


先往主表中插入记录

mysql> insert into press(name) values('北京工业地雷出版社'),('人民音乐不好听出版社'),('知 识产权没有用出版社');

Query OK, 3 rows affected (0.00 sec)

Records: 3  Duplicates: 0  Warnings: 0


再往从表中插入记录

mysql> insert into book(name,press_id) values('九阳神功',1),('九阴真经',2),('九阴白骨爪',2),('独孤九剑',3),('降龙十巴掌',2),('葵花宝典',3);

Query OK, 6 rows affected (0.01 sec)

Records: 6  Duplicates: 0  Warnings: 0


查询结果:

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+一张新的表

blob.png


创建被关联表author表,之前的book表在讲多对一的关系已创建

mysql> create table author(id int primary key auto_increment,name varchar(20));

Query OK, 0 rows affected (0.09 sec)


这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了

mysql> 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 cascade on update cascade,constraint fk_book foreign key(book_id) references book(id) on delete cascade on update cascade,primary key(author_id,book_id));

Query OK, 0 rows affected (0.07 sec)


插入四个作者,id依次排开

mysql> insert into author(name) values('zhangsan'),('lisi'),('wangwu'),('zhuliu');

Query OK, 4 rows affected (0.01 sec)

Records: 4  Duplicates: 0  Warnings: 0


每个作者的代表作

zhangsan: python全栈开发,web前端、爬虫技术、linux高级运维

lisi: python全栈开发、linux高级运维

wangwu:web前端、爬虫技术、linux高级运维

zhuliu:python全栈开发


在author2book表中插入相应的数据

mysql> insert into author2book(author_id,book_id) values (1,1),(1,2),(1,3),(1,4),(2,1),(2,2),(3,2),(3,3),(3,4),(4,1);

Query OK, 10 rows affected (0.00 sec)

Records: 10  Duplicates: 0  Warnings: 0


现在就可以查author2book对应的作者和书的关系了

mysql> select * from author2book;

+----+-----------+---------+

| id | author_id | book_id |

+----+-----------+---------+

|  1 |         1 |       1 |

|  2 |         1 |       2 |

|  3 |         1 |       3 |

|  4 |         1 |       4 |

|  5 |         2 |       1 |

|  6 |         2 |       2 |

|  7 |         3 |       2 |

|  8 |         3 |       3 |

|  9 |         3 |       4 |

| 10 |         4 |       1 |

+----+-----------+---------+

10 rows in set (0.00 sec)


(3)用户和博客

  一对一:一个用户只能注册一个博客,即一对一的关系。看图说话

  关联方式:foreign key+unique

blob.png


例如: 一个用户只能注册一个博客

两张表: 用户表 (user)和 博客表(blog)


创建用户表

mysql> create table user(id int primary key auto_increment,name varchar(20));

Query OK, 0 rows affected (0.09 sec)


创建博客表

mysql> 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 cascade on update cascade);

Query OK, 0 rows affected (0.06 sec)


插入用户表中的记录

mysql> insert into user(name) values('alex'),('wusir'),('egon'),('xiaoma');

Query OK, 4 rows affected (0.01 sec)

Records: 4  Duplicates: 0  Warnings: 0


插入博客表的记录

mysql> insert into blog(url,user_id) values('http://www.zhangsan.com',1),('http://www.lisi.com',2),('http://www.wangwu.com',3),('http://www.zhuliu.com',4);

Query OK, 4 rows affected (0.01 sec)

Records: 4  Duplicates: 0  Warnings: 0


查询lisi的博客地址

mysql> select url from blog where user_id=2;

+---------------------+

| url                 |

+---------------------+

| http://www.lisi.com |

+---------------------+

1 row in set (0.00 sec)


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql-外键的三种关系

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql-外键的三种关系

介绍因为有foreign key的约束,使得两张表形成了三种了关系:多对一多对多一对一重点理解如果找出两张表之间的关系分析步骤:#1、先站在左表的角度去找是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreignk
2023-01-30

MySQL之外键、表关系及SQL查询关键字

一、外键假设现在我们有一张员工信息表,表的字段如下:id # 主键name # 姓名age # 年龄dep_name # 部门名称dep_desc # 部门描述单从数据存储上来看,这个表是没有问题的,但是从程序开发角度来看的话,这张表目前有如下三个缺
MySQL之外键、表关系及SQL查询关键字
2018-09-24

MySQL 外键约束和表关系相关总结

目录外键(Foreign Key)如何确定表关系如何建立表关系一对多关系 - 员工表和部门表多对多一对一表关系总结外键(Foreign Key)按照上述所说,一张表存储员工信息会极大的浪费资源,重复数据太多,这个问题就类似于将所有的代码都写
2022-05-18

java中this关键字的三种用法

this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以分为3种:1、普通的直接引用,this相当于是指向当前对象本身。(推荐教程:java入门教程)2、形参与成员名字重名,用this来区分:public
java中this关键字的三种用法
2020-08-05

MySQL 外键关联策略

eg.一个用户可有拥有多个订单,一个订单只能属于一个用户,一对多,在tb_order中使用外键user_id关联tb_user的id。当删除、更新tb_user中的主键时,与之关联的tb_order要受到影响,比如#tb_user中的一条记录1 chy a
MySQL  外键关联策略
2018-05-20

MySQL外键关联操作的实现

目录mysql 的外键约束修改原有表的外键约束删除外键约束MySQL 的外键约束注意,MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FOREIGN_KEY_CH
2022-07-28

oracle外键关系怎么设置

在 oracle 数据库中设置外键关系需要以下步骤:1. 创建包含外键列的表。2. 使用 alter table 语句创建外键约束,指定外键列和被引用的主键列。3. 检查约束是否存在。4. 使用 alter table 语句启用约束。Ora
oracle外键关系怎么设置
2024-05-21

sql外键关系如何设置

在SQL中,外键关系可以通过以下步骤来设置:1、在需要设置外键关系的表中定义一个外键列,该列将引用另一个表中的主键列。2、使用ALTER TABLE语句来添加外键约束。例如:ALTER TABLE 表1ADD CONSTRAINT
sql外键关系如何设置
2024-04-09

Mysql添加外键的两种方式详解

目录mysql添加外键的几种方式方法一:方法二:补充:MySQL js删除外键操作总结 Mysql添加外键的几种方式注意:添加外键是给从表添加(即子表)父表是主表方法一:创建表之前:FOREIGN KEY (子表id) REFERE
2023-04-10

mysql怎么设置主外键关联

在 mysql 中设置主外键关联需要遵循以下步骤:在子表中定义外键约束,指定外键列与主表中相关联的列;指定更新和删除操作时子表记录应如何处理;添加外键约束后,mysql 将强制执行数据完整性,确保子表中的记录始终与主表中的相关记录关联。如何
mysql怎么设置主外键关联
2024-05-22

编程热搜

目录