返回顶部
首页 > 资讯 > 数据库 >mysql-外键的三种关系
  • 567
分享到

mysql-外键的三种关系

三种关系mysql 2023-01-30 22:01:50 567人浏览 独家记忆
摘要

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

介绍

因为有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)


您可能感兴趣的文档:

--结束END--

本文标题: mysql-外键的三种关系

本文链接: https://lsjlt.com/news/179133.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql-外键的三种关系
    介绍因为有foreign key的约束,使得两张表形成了三种了关系:多对一多对多一对一重点理解如果找出两张表之间的关系分析步骤: #1、先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreig...
    99+
    2023-01-30
    三种 关系 mysql
  • mysql外键的关系有哪些
    mysql外键的关系有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  多对一  create table press( ...
    99+
    2024-04-02
  • mysql如何删除外键关系
    这篇“mysql如何删除外键关系”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql如...
    99+
    2024-04-02
  • MySQL之外键、表关系及SQL查询关键字
    一、外键 假设现在我们有一张员工信息表,表的字段如下: id # 主键 name # 姓名 age # 年龄 dep_name # 部门名称 dep_desc # 部门描述 单从数据存储上来看,这个表是没有问题的,但是从程序开...
    99+
    2018-09-24
    MySQL之外键 表关系及SQL查询关键字
  • MySQL 外键约束和表关系相关总结
    目录外键(Foreign Key)如何确定表关系如何建立表关系一对多关系 - 员工表和部门表多对多一对一表关系总结外键(Foreign Key) 按照上述所说,一张表存储员工信息会极大的浪费资源,重复数据太多,这个...
    99+
    2022-05-18
    MySQL 外键约束 MySQL 表关系
  • 关系数据库的关键组件:主键与外键
    ...
    99+
    2024-04-02
  • java中this关键字的三种用法
    this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以分为3种:普通的直接引用,this相当于是指向当前对象本身。(推荐教程:java入门教程)形参与成员名字重名,用this来区分:p...
    99+
    2020-08-05
    java入门 java this
  • MySQL 外键关联策略
      eg.一个用户可有拥有多个订单,一个订单只能属于一个用户,一对多,在tb_order中使用外键user_id关联tb_user的id。 当删除、更新tb_user中的主键时,与之关联的tb_order要受到影响,比如 #tb...
    99+
    2018-05-20
    MySQL 外键关联策略
  • 数据库关系的丝线:主键与外键
    ...
    99+
    2024-04-02
  • 关系数据库的脉搏:主键与外键
    ...
    99+
    2024-04-02
  • 关系数据库的骨架:主键与外键
    ...
    99+
    2024-04-02
  • MySQL外键关联操作的实现
    目录mysql 的外键约束修改原有表的外键约束删除外键约束MySQL 的外键约束 注意,MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FORE...
    99+
    2022-07-28
    MySQL外键关联 MySQL关联外键
  • 补12.关于mysql的外键约束
    一、什么是mysql中的外键(froeign key)假如说有两张表,其中一张表的某个字段指向了另一张表的主键,这就可以称之为外键(froeign key)。在子表中增加一条记录时,需要确定是否有与父表相对...
    99+
    2024-04-02
  • sql外键关系如何设置
    在SQL中,外键关系可以通过以下步骤来设置: 1、在需要设置外键关系的表中定义一个外键列,该列将引用另一个表中的主键列。 2、使用A...
    99+
    2024-04-09
    sql
  • oracle外键关系怎么设置
    在 oracle 数据库中设置外键关系需要以下步骤:1. 创建包含外键列的表。2. 使用 alter table 语句创建外键约束,指定外键列和被引用的主键列。3. 检查约束是否存在。4...
    99+
    2024-05-21
    oracle
  • Mysql添加外键的两种方式详解
    目录mysql添加外键的几种方式方法一:方法二:补充:MySQL 删除外键操作总结 Mysql添加外键的几种方式 注意:添加外键是给从表添加(即子表)父表是主表 方法一: 创建表之前: FOREIGN KEY ...
    99+
    2023-04-10
    mysql添加外键 mysql怎么增加外键 MySQL添加外键操作
  • mysql中怎么实现外键关联
    mysql中怎么实现外键关联,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 > show create table cou...
    99+
    2024-04-02
  • mysql怎么设置主外键关联
    在 mysql 中设置主外键关联需要遵循以下步骤:在子表中定义外键约束,指定外键列与主表中相关联的列;指定更新和删除操作时子表记录应如何处理;添加外键约束后,mysql 将强制执行数据完...
    99+
    2024-05-22
    mysql
  • mysql数据库添加外键的四种方式
    文章目录 一、添加外键的四种方式二、文档下载 一、添加外键的四种方式 1、 建表时直接使用FOREIGN KEY,这种方式外键名称自动生成。如下图。 FOREIGN KEY (user_...
    99+
    2023-10-02
    数据库 mysql
  • 关系数据库系统如何实现的三种基本关系运算
    这篇文章主要介绍了关系数据库系统如何实现的三种基本关系运算,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。关系数据库管理系统能够实现的三种基本关系...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作