一对多

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 |
+----+-----------------+----------+
rows in set (0.00 sec)mysql> select * from press;
+----+--------------------------------+
| id | name                           |
+----+--------------------------------+
|  1 | 北京工业地雷出版社             |
|  2 | 人民音乐不好听出版社           |
|  3 | 知识产权没有用出版社           |
+----+--------------------------------+
rows in set (0.00 sec)

多对多

# 创建被关联表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('qwe'),('asd'),('zxc'),('wer');# 每个作者的代表作
qwe: 九阳神功、九阴真经、九阴白骨爪、独孤九剑、降龙十巴掌、葵花宝典
asd: 九阳神功、葵花宝典
zxc:独孤九剑、降龙十巴掌、葵花宝典
wer:九阳神功# 在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 |
+----+-----------+---------+
rows in set (0.00 sec)

一对一

#例如: 一个用户只能注册一个博客#两张表: 用户表 (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
('qwe'),
('asd'),
('zxc'),
('ert')
;
# 插入博客表的记录
insert into blog(url,user_id) values
('http://www.cnblog/qwe',1),
('http://www.cnblog/asd',2),
('http://www.cnblog/zxc',3),
('http://www.cnblog/ert',4)
;
# 查询wusir的博客地址
select url from blog where user_id=2;

转载于:https://www.cnblogs.com/NachoLau/p/10398519.html

MySQL外键的三种关系相关推荐

  1. 06 外键的三种分类

    1. 外键的3种关系 因为有foreign key的约束,使得两张表形成了三种关系 (1)多对一.一对多 (2)多对多 (3)一对一 2. 如何找出两张表之间的关系 分析步骤: #1.先站在左表的角度 ...

  2. 【Foreign Key】Oracle外键约束三种删除行为

    Oracle使用外键来限制子表中参考的字段值,要求子表中的数据必须在主表中存在.当主表的记录发生变化时导致外键参考唯一约束值发生了变化时,Oracle指定了三种动作:默认值(类似于restrict). ...

  3. oracle 删除表数据 有外键约束,【Foreign Key】Oracle外键约束三种删除行为

    Oracle使用外键来限制子表中参考的字段值,要求子表中的数据必须在主表中存在.当主表的记录发生变化时导致外键参考唯一约束值发生了变化时,Oracle指定了三种动作:默认值(类似于restrict). ...

  4. Mysql -- 外键的变种 三种关系

    一.介绍 因为有foreign  key的约束,  使得两张表形成了三种关系 多对一      多对多   一对一 二.如果找出两张表之间的关系 #1.先站在左表的角度去找 是否左表的多条记录可以对应 ...

  5. python 全栈开发,Day62(外键的变种(三种关系),数据的增删改,单表查询,多表查询)...

    一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 二.重点理解如果找出 ...

  6. SQL外键foreign key 表与表之间的三种关系

    表与表之间的三种关系 多对一关系表 注意事项: 一对多表关系,外键字段建在多的一方. 在创建表的时候,一定要先建被关联表. 在录入数据的时候,也必须先录入被关联表. 删除 一定要先删除主键表,才可以删 ...

  7. mysql cascade|restrict|no action|set null__mysql 外键的几种约束

    mysql cascade|restrict|no action|set null MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中 ...

  8. MySql数据库三种关系详解

    如何分辨三种关系,以及三种关系的图列对比. 1.分析三种关系. 是否左表的多条记录可以对应右表的一条记录,是,则证明左表的一个字段 关联(foreign key)右表的一个字段(通常为ID) 是否右表 ...

  9. mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

    详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC  ...

  10. MySQL增加外键的两种方式

    MySQL增加外键的两种方式 *根据需求建一下表 i: emp表 ii:dept表 *1.增加外键(创建表的时候) 代码实现(工具:Navicat 12 for MySQL) CREATE TABLE ...

最新文章

  1. DPDK — DPDK APP 的指令行参数
  2. ExecuteNonQuery()返回受影响行数不适用select语句
  3. linux 防火墙开启1521端口,linux防火墙开放1521端口
  4. PHPStorm使用指南
  5. 使用CL_RS_WHERE创建dynamic SQL statement
  6. vue、bus 使用遇到的坑,组件之间无法传值;vue、bus 第一次获取不到值,后面再点击重复执行
  7. 华中科技大学计算机预推免2021,华中科技大学光学与电子信息学院2021年推免预报名通知...
  8. AI软件制作莫比乌斯环
  9. 你们一年大概可以存多少钱?
  10. Eclipse快捷键大全(同样适用基于Eclipse开发的IDE)
  11. Windows 10 安装 scrapy 步骤
  12. 20多个Maven命令和选项(备忘单)
  13. Win8 MSDN 简中/繁中/英文正式版下载(微软官方原版)
  14. 汇编原理6:opcode
  15. lammps学习总结3
  16. WIN10教育版怎么可以变更为专业版
  17. html怎么清除背景颜色,怎么去除Word复制网页内容的背景色?
  18. stream从list实体类筛选出符合条件的单个实体类
  19. 数字资产支付行业研究报告 | TokenInsight
  20. 嵌入式开发要学什么_必备嵌入式学习路线_高手速成方法

热门文章

  1. Django中ORM模型总结(二)[抽象模型类,模型类的对应关系,模型类的属性,字段类型]...
  2. AngularJS 模板
  3. mac安装ElasticSearch
  4. 把业务逻辑变成数据结构和SQL语句的例子。自然架构改成自然框架
  5. DataMining with Sql 2005
  6. 在div 底部显示背景图片
  7. 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) B - Enlarging Enthusiasm dp好题
  8. vector容器中添加和删除元素
  9. 解决unity3d发布的网页游戏放到服务器上无法使用的问题
  10. 左边导航条动态增加或缩短高度以及放大缩小问题的解决方法