一. 前言

  表与 表之间有3种对应关系,分别是:

  多对一:一张表中的一个字段中的多个值对应另外一张表中的一个字段值.(多个学生,可以学习同一门课程)

  多对多;一张表中的一个字段值对应另外一张表中的多个字段值(一个作者可以写多本书籍,一本书也可以由多个作者联合编著)

  一对一:一张表中一个字段值对应另外一个张表的一个字段值(一个用户名对应一个博客园的地址)

确认关系的方法:
表1 foreign key 表2
则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系
多对多:
表1的多条记录可以对应表2的一条记录
表2的多条记录也可以对应表1的一条记录 一对一:
表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了

 一对一

 #先建立被关联的表

 create table user(id int primary key auto_increment,name char(15));
#插入用户数据
insert into user(name) values
("jack"),
("chen"),
("wang"),
("yaya"); #再创建关联表
create table blogs(id int primary key auto_increment,address varchar(50),
uid int not null unique,foreign key (uid) references user(id));
#插入数据
insert into blogs(address,uid) values
("www.cnblogs.com/jack",1),
("www.cnblogs.com/chen",2),
("www.cnblogs.com/yaya",4),
("www.cnblogs.com/wang",3);

一对一关系

多对一:

 多对一关系:
1.建立被关联表
create table courses(id int primary key auto_increment,name char(10));
insert into courses(name) values
("英语"),
("语文"),
("数学"); 2.建立关联表 create table students(id int primary key auto_increment,name char(10),course_id int,foreign key (course_id) references courses(id));
insert into students(name,course_id) values
("jack",1),
("chen",1),
("yaya",3),
("wang",3),
("lilei",2); select * from students;
+----+-------+-----------+
| id | name | course_id |
+----+-------+-----------+
| 1 | jack | 1 |
| 2 | chen | 1 |
| 3 | yaya | 3 |
| 4 | wang| 3 |
| 5 | lilei | 2 |
+----+-------+-----------+ select * from courses;
+----+--------+
| id | name |
+----+--------+
| 1 | 英语 |
| 2 | 语文 |
| 3 | 数学 |
+----+--------+

多对一

多对多关系

 #多对多关系
#1.创建被关联表
create table author1 (id int primary key auto_increment,name char(10));
insert into author1 (name) values
("jack"),
("chen"),
("wang"),
("lili"),
("lucy"),
("lilei"); create table book1(id int primary key auto_increment,name char(6));
insert into book1(name) values
("python入门"),
("linux精通"),
("go实战"); #2.创建关联表,book_id和author_id联合唯一,避免出现重复的现象 create table book2author1(id int primary key auto_increment,book_id int not null ,author_id int not null, unique(book_id,author_id),
foreign key(book_id) references book1(id) on delete cascade on update cascade,
foreign key(author_id) references author1(id) on delete cascade on update cascade); insert into book2author1(book_id,author_id)values
(1,1),
(1,5),
(2,4),
(2,6),
(3,2),
(3,3);

多对多关系

day 7-15 表与表之间的关系的更多相关文章

  1. MySQL表与表之间的关系

    表与表之间的关系 表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以 ...

  2. MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系

    数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...

  3. python 之 数据库(字段的约束条件,表之间的关系)

    10.6 约束条件 10.61 not null .default create table t15( id int, name ) not null, sex enum('male','female ...

  4. java:Oracle(聚合函数,多表查询,表之间的关系)

    1.聚合函数 --max,min,sum,avg,count,nvl(,) -- max:最大值 -- max既能取数字的最大值,也可以取字符串的最大值(英文字母排列顺序),根据场景实际意义来看,最好 ...

  5. 从零自学Hadoop(15):Hive表操作

    阅读目录 序 创建表 查看表 修改表 删除表 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceL ...

  6. PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

    看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我 ...

  7. PostgreSQL表空间、模式、表、用户/角色之间的关系

    PostgreSQL表空间.模式.表.用户/角色之间的关系是本文我们主要要介绍的内容,表空间,数据库,模式,表,用户,角色之间的关系到底是怎样的呢?接下来我们就开始介绍这一过程. 实验出角色与用户的关 ...

  8. SSAS的维度表之间的关系只能有一个不能有多个

    我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子. 现在 ...

  9. mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决

    ※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE var ...

随机推荐

  1. Linux最终将会领先于Windows、Mac OS!

    Linux最终将会领先于Windows.Mac OS! 众所周知,硬件离开了软件就像人失去灵魂,而操作系统作为软件中的基础部分,更是重中之重!无论手机.电脑.还是服务器一旦离开了操作系统,比之一堆废铁 ...

  2. Linux之文件属性

    文件属性是什么? [root@luffy_boy-001 /]# ls -lhi /etc/hosts 129822 -rw-r--r--. 2 root root 198 Jan 11 2019 / ...

  3. python六十四课——高阶函数练习题(一)

    1.lt = ['sdfasdfa', 'ewqrewrewqr', 'dsafa12312fdsafd', 'safsadf'] --> 得到长度列表2.tp = ('TOM', 'Lilei ...

  4. Insert Into 语句的语法错误

    错误示意: 一开始程序是: 改正: 一条很简单的插入语句竟然会报错,然而直接在数据库的查询中执行中却没有问题,这个问题困扰了不少时间. 数据库使用的是ACCESS,INSERT INTO语句为inse ...

  5. 用golang chromedp 操作已经打开的chrome浏览器

    win7 环境,主要是一开始想在代码中先用exec.Command启动chrome,但始终不能成功监听9222端口,折腾了很长时间, 需要先手工启动chrome监听端口,具体写在代码注释中了. 然后再 ...

  6. 在Ubuntu18.04上使用Anaconda

    启动Anaconda Navigator 图形化界面 $ source ~/anaconda3/bin/activate root $ anaconda-navigator 查看目前的conda版本: ...

  7. Python:Day46 Javascript DOM

    history对象: History 对象包含用户(在浏览器窗口中)访问过的 URL.窗口之间是相互独立的. <input type="button" onclick=&qu ...

  8. 【vue】vue +element 实现批量删除

    相关资料:http://blog.csdn.net/eagle_88/article/details/70238836 作者:smile.轉角 QQ:493177502

  9. 手动设定统计数据 set_table_stats

    PROCEDURE SET_TABLE_STATS Argument Name Type In/Out Default? ------------------------------ -------- ...

  10. selenium中遇到div弹框,一起引申到其他弹框

    1.div弹框和DOM普通元素一样处理 2.出现一下就自动消失的弹框,也是在DOM中有描述的,可以使用xpath,用其内容定位 3.(转,其他弹框处理,包括alert和不同windows) https ...