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

  • 多对一
  • 多对多
  • 一对一

一对多或多对一

  1. create table press(
  2. id int primary key auto_increment,
  3. name varchar(20)
  4. );
  5.  
  6. create table book(
  7. id int primary key auto_increment,
  8. name varchar(20),
  9. press_id int not null,
  10. constraint fk_book_press foreign key(press_id) references press(id)
  11. on delete cascade
  12. on update cascade
  13. );
  14.  
  15. # 先往被关联表中插入记录
  16. insert into press(name) values
  17. ('北京工业地雷出版社'),
  18. ('人民音乐不好听出版社'),
  19. ('知识产权没有用出版社')
  20. ;
  21.  
  22. # 再往关联表中插入记录
  23. insert into book(name,press_id) values
  24. ('九阳神功',1),
  25. ('九阴真经',2),
  26. ('九阴白骨爪',2),
  27. ('独孤九剑',3),
  28. ('降龙十巴掌',2),
  29. ('葵花宝典',3)
  30. ;
  31.  
  32. 查询结果:
  33. mysql> select * from book;
  34. +----+-----------------+----------+
  35. | id | name | press_id |
  36. +----+-----------------+----------+
  37. | 1 | 九阳神功 | 1 |
  38. | 2 | 九阴真经 | 2 |
  39. | 3 | 九阴白骨爪 | 2 |
  40. | 4 | 独孤九剑 | 3 |
  41. | 5 | 降龙十巴掌 | 2 |
  42. | 6 | 葵花宝典 | 3 |
  43. +----+-----------------+----------+
  44. 6 rows in set (0.00 sec)
  45.  
  46. mysql> select * from press;
  47. +----+--------------------------------+
  48. | id | name |
  49. +----+--------------------------------+
  50. | 1 | 北京工业地雷出版社 |
  51. | 2 | 人民音乐不好听出版社 |
  52. | 3 | 知识产权没有用出版社 |
  53. +----+--------------------------------+
  54. 3 rows in set (0.00 sec)

多对一

多对多,引入第三张表

  1. # 创建被关联表author表,之前的book表在讲多对一的关系已创建
  2. create table author(
  3. id int primary key auto_increment,
  4. name varchar(20)
  5. );
  6. #这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了
  7. create table author2book(
  8. id int not null unique auto_increment,
  9. author_id int not null,
  10. book_id int not null,
  11. constraint fk_author foreign key(author_id) references author(id)
  12. on delete cascade
  13. on update cascade,
  14. constraint fk_book foreign key(book_id) references book(id)
  15. on delete cascade
  16. on update cascade,
  17. primary key(author_id,book_id)
  18. );
  19. #插入四个作者,id依次排开
  20. insert into author(name) values('egon'),('alex'),('wusir'),('yuanhao');
  21.  
  22. # 每个作者的代表作
  23. egon: 九阳神功、九阴真经、九阴白骨爪、独孤九剑、降龙十巴掌、葵花宝典
  24. alex: 九阳神功、葵花宝典
  25. wusir:独孤九剑、降龙十巴掌、葵花宝典
  26. yuanhao:九阳神功
  27.  
  28. # 在author2book表中插入相应的数据
  29.  
  30. insert into author2book(author_id,book_id) values
  31. (1,1),
  32. (1,2),
  33. (1,3),
  34. (1,4),
  35. (1,5),
  36. (1,6),
  37. (2,1),
  38. (2,6),
  39. (3,4),
  40. (3,5),
  41. (3,6),
  42. (4,1)
  43. ;
  44. # 现在就可以查author2book对应的作者和书的关系了
  45. mysql> select * from author2book;
  46. +----+-----------+---------+
  47. | id | author_id | book_id |
  48. +----+-----------+---------+
  49. | 1 | 1 | 1 |
  50. | 2 | 1 | 2 |
  51. | 3 | 1 | 3 |
  52. | 4 | 1 | 4 |
  53. | 5 | 1 | 5 |
  54. | 6 | 1 | 6 |
  55. | 7 | 2 | 1 |
  56. | 8 | 2 | 6 |
  57. | 9 | 3 | 4 |
  58. | 10 | 3 | 5 |
  59. | 11 | 3 | 6 |
  60. | 12 | 4 | 1 |
  61. +----+-----------+---------+
  62. 12 rows in set (0.00 sec)

多对多

一对一的情况

  1. #例如: 一个用户只能注册一个博客
  2.  
  3. #两张表: 用户表 (user)和 博客表(blog)
  4. # 创建用户表
  5. create table user(
  6. id int primary key auto_increment,
  7. name varchar(20)
  8. );
  9. # 创建博客表
  10. create table blog(
  11. id int primary key auto_increment,
  12. url varchar(100),
  13. user_id int unique,
  14. constraint fk_user foreign key(user_id) references user(id)
  15. on delete cascade
  16. on update cascade
  17. );
  18. #插入用户表中的记录
  19. insert into user(name) values
  20. ('alex'),
  21. ('wusir'),
  22. ('egon'),
  23. ('xiaoma')
  24. ;
  25. # 插入博客表的记录
  26. insert into blog(url,user_id) values
  27. ('http://www.cnblog/alex',1),
  28. ('http://www.cnblog/wusir',2),
  29. ('http://www.cnblog/egon',3),
  30. ('http://www.cnblog/xiaoma',4)
  31. ;
  32. # 查询wusir的博客地址
  33. select url from blog where user_id=2;

一对一

mysql外键的三种关系的更多相关文章

  1. 完整性约束&外键变种三种关系&数据的增删改

    完整性约束 本节重点: not null 与 default unique primary auto_increment foreign key 一.介绍 约束条件与数据类型的宽度一样,都是可选参数 ...

  2. day42——外键的限制和解决方法、外键的三种约束模式、修改表(单表查询)

    day42 外键的限制和解决方法 可以添加外键关联的那个字段可以是 被唯一(unique)约束的字段 或者 主键 限制:+ 由于外键的使用,致使多个表之间产生了联系,当我们对这些表进行更新或删除操作的 ...

  3. mysql 外键的几种约束

    restrict方式 同no action, 都是立即检查外键约束    --限制,指的是如果字表引用父表的某个字段的值,那么不允许直接删除父表的该值: cascade方式 在父表上update/de ...

  4. django 神奇的双下划线,通过外键的三种查询方式

    一,用于跨表操作 只要是object后面字符串都是用双下划线__.其它地方用点. 如:的values中的group_code__name.group_code是一个外键 def list(reques ...

  5. python全栈开发day55-mysql外键的三种变种

    一.昨日内容回顾 二.今日内容总结 三.mysql应知必会 你可以通过INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表来查看. select * from INFORMATI ...

  6. MySQL学习7 - 外键的变种 三种关系

    一 介绍 二 如何找两张表之间的关系 三 表的三种关系 1.书和出版社 2.作者和书籍的关系 3.用户和博客 本节的重点 如何找出两张表之间的关系 表的三种关系 一 介绍 因为有foreign key ...

  7. mysql更新(五) 完整性约束 外键的变种 三种关系 数据的增删改

    11-数据的增删改   本节重点: 插入数据 INSERT 更新数据 UPDATE 删除数据 DELETE 再来回顾一下之前我们练过的一些操作,相信大家都对插入数据.更新数据.删除数据有了全面的认识. ...

  8. Mysql外键的变种 三种关系

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

  9. day03 mysql外键 表的三种关系 单表查询 navicat

    day03 mysql navicat   一.完整性约束之     外键 foreign key     一个表(关联表: 是从表)设置了外键字段的值, 对应的是另一个表的一条记录(被关联表: 是主 ...

随机推荐

  1. MySQL程序之mysqlshow详解

    mysqlshow命令详解 显示MySQL数据库的结构(数据库.表和列) 如果最后一个参数包含shell或SQL通配符(*,?,%,_)将显示通配符匹配的内容. 如果没有给定数据库,则显示所有匹配的数 ...

  2. spring-jar包及架构介绍

    查看博客: http://www.cnblogs.com/ywlaker/p/6136625.html

  3. System Generator 使用离散资源

    System Generator 使用离散资源 重要,怎样配置FPGA中的DSP Macro 最后是编译模型

  4. MDIEMDIE双心封装版0.3.0.0RC6V2

    MDIEMDIE双心封装版0.3.0.0 RC6V2官方主页:http://cres.s28.xrea.com/MDIE(多文档界面资源管理器)是一个MDI类型的文件管理软件,是代替资源管理器的一个无 ...

  5. 《剑指offer(第二版)》面试题55——判断是否为平衡二叉树

    一.题目大意 输入一颗二叉树,判断该二叉树是否为平衡二叉树(AVL树). 二.题解 <剑指offer>上给出了两种解决方式: 1.第一种是从根节点开始,从上往下遍历每个子节点并计算以子节点 ...

  6. Javascript中的this(七)

    一.为什么要用this      通过this可以在不同的上下文对象中重复使用函数 二.this是什么      this就是我们说的执行上下文(包含调用栈(哪里被调用).函数的调用方式.传入的参数等 ...

  7. 外观(Facade)模式

    外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 在软件开发中,有时候为了完成一项较为复杂的功能,一个客户类需要和多个业务类交互,而这些需 ...

  8. P2064进制转换

    题目:https://www.luogu.org/problemnew/show/P2084 既然这道题放在字符串类型里,那么这里的N肯定得用字符数组来储存(这样也方便输出). 那么我们不妨定义一个字 ...

  9. SQL优化系列——索引

    索引可能是数据库中最被误解的主题,因为有很多方式让你糊涂索引如何工作,以及服务器如何使用它们.要正确设计索引,让索引在数据库服务器中满足以下三个重要目的:1,索引使服务器查找一组相邻行,而不是单独的行 ...

  10. [UE4]使用材质将图片变成黑白

    拖动到材质界面不放,会自动切换到材质界面: 拖放到视图窗口,放开鼠标,就会自动生成一个“Texture Sample”节点 图片材质使用方法跟直接使用图片素材一样: