MySQL表关系

一对多关系

一对多与多对一是一个概念,指的是一个实体的某个数据与另外一个实体的多个数据有关联关系。 举例,学校中一个学、院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。

#创建学院表:
mysql> CREATE TABLE `department`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(10) NOT NULL,
-> `code` INT NOT NULL
-> );
#创建学生表
mysql> CREATE TABLE `student`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(10) NOT NULL,
-> `dep_id` INT,
-> CONSTRAINT `stu_dep_for_key` FOREIGN KEY (`dep_id`) REFERENCES `department`(`id`) ON DELETE RESTRICT
-> ); #插入数据
mysql> INSERT INTO `department`(`name`,`code`)
-> VALUES('理学院',01),
-> ('计算机学院',02)
-> ;
mysql> SELECT * FROM `department`; mysql> INSERT INTO `student`(`name`,`dep_id`)
-> VALUES('budong',1),
-> ('awen',1),
-> ('dongdong',2);
mysql> SELECT * FROM `student`;

一对一关系

举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息。用外键加主键的方式来实现这种关系。

mysql> DESCRIBE `student`;

#建立学生的详细信息表
mysql> CREATE TABLE `student_details`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `id_card` INT NOT NULL UNIQUE KEY,
-> `telephone` INT,
-> `stu_id` INT,
-> CONSTRAINT `stu_deta_for_key` FOREIGN KEY (`stu_id`) REFERENCES `student`(`id`) ON DELETE CASCADE
-> ); #插入数据
mysql> INSERT INTO `student_details`(`id_card`,`telephone`,`stu_id`)
-> VALUES(4301,133,1),
-> (4302,157,2);
#这里信息一一对应,所以一般会同步插入

多对多关系

一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。

举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。

#创建课程表
mysql> CREATE TABLE `course`(
-> `id` INT PRIMARY KEY AUTO_INCREMENT,
-> `name` VARCHAR(20) NOT NULL
-> ); mysql> CREATE TABLE `select`(
-> `stu_id` INT,
-> `coures_id` INT,
-> PRIMARY KEY(`stu_id`,`coures_id`),
-> CONSTRAINT `select_stu_id_for_key` FOREIGN KEY (`stu_id`) REFERENCES `student`(`id`),
-> CONSTRAINT `select_coures_id_for_key` FOREIGN KEY (`coures_id`) REFERENCES `course`(`id`)
-> );

CREATE TABLE select(stu_id INT,course_id INT,PRIMARY KEY(stu_id,course_id),CONSTRAINT select_stu_id_for_key FOREIGN KEY (stu_id) REFERENCES students(id),CONSTRAINT select_course_id_for_key FOREIGN KEY (course_id) REFERENCES course(id));

create table select(stu_id int, course_id int,primary key(stu_id,course_id),constraint select_stu_id_for_key foreign key (stu_id) references students(id),constraint select_course_id_for_key foreign key (course_id) references course(id));

MySQL之表关系的更多相关文章

  1. Mysql多表关系

    mysql多表关系 多表关系是关系型数据库特有的 三种关系 一对一关系 一对多关系 多对多关系 总结 一对一 例子:用户和用户信息 外键设置在用户上,外键字段唯一非空 添加 无级联:先增加被关联表记录 ...

  2. MySql 多表关系

    多表关系 一对一关系 一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面 一对多关系 班级是1端,学生是多端,结合面向对象的思想 ...

  3. mysql管理表关系

    表关系管理 关注公众号"轻松学编程"了解更多. 1.概述 ​ 表与表之间的关系可以是一对一.一对多.多对一的.通过外键把表连接起来,外键放在任意一张表都可以,通常选择由从表(相对次 ...

  4. MySQL约束条件 表关系建立 查询数据

    约束条件 unsigned 无符号 即为非负数,用此类型可以增加数据长度 例如 tinyint最大范围是127,那tinyint unsigned 最大就可以到 127 * 2 通常用在不会出现符号的 ...

  5. MySQL之表关系与范式

    关系: 所有的关系都是指表与表之间的关系. 将实体与实体的关系,反应到最终数据库表的设计上来,可以将关系分成三种:一对一,一对多(多对一)和多对多. 一对一: 一张表的一条记录一定只能与另外一张表的记 ...

  6. 库增删该查,表增删该查,记录增删该查,表与表关系(多对多,多对一,一对一),mysql用户管理

    库增删该查 增加库 create database db1 create database db1 charset="gbk 查看库 show databases 查看所有库 show cr ...

  7. MySQL开发——【多表关系、引擎、外键、三范式】

    多表关系 一对一关系 一对多或多对一关系 多对多关系 MySQL引擎 所谓的MySQL引擎就是数据的存储方式,常用的数据库引擎有以下几种: Myisam与InnoDB引擎之间的区别(面试) ①批量插入 ...

  8. MySQL数据库篇之完整性约束和表关系

    主要内容: 一.完整性约束 二.表关系 1️⃣ 完整性约束 (1)何为完整性约束? 约束条件与数据类型的宽度一样,都是可选参数. 作用:用于保证数据的完整性和一致性 (2)分类主要有以下五类: 1.n ...

  9. mysql数据库之表关系

    外键 前戏之一对多关系 # 定义一张部门员工表id name gender dep_name dep_desc1 jason male 教学部 教书育人2 egon male 外交部 漂泊游荡3 ta ...

随机推荐

  1. Python基础初始之二

    1.格式化的输出 当你遇到这样的需要:字符串中想让某些位置变成动态可传入的,首先考虑用格式化输出 1.格式化输出:% 2. 格式化输出:format 3. 格式化输出:f 2.运算符 3.编码 待续

  2. linux中添加自定义命令

    centos下设置alias别名,比较简单,例如: vim /root/.bashrc addalias rm='rm -i' Linux alias设置指令的别名命令详解 功能说明:设置指令的别名. ...

  3. 关于git clone远程仓库账户密码错误的问题

    这两天刚使用coding和git,但是在我第一次克隆coding上的项目的时候,提示输入账户和密码,当时我不知道这个账户和密码是指的哪个,就随便输入了,然后提示错误,,,,,, 之后每次克隆的时候都提 ...

  4. 分析第一个Android程序

    项目结构切换Project, 项目真实目录结构 { 1.    .gradle和idea 两个目录放置的都是Android Studio 自动生成的一些文件,我们无需关心,也不要去手动编辑. 2.AP ...

  5. B/S大附件上传,支持断点续传

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  6. 小程序支付及H5支付前端代码小结

    小程序支付和H5支付前端都不需要引入其他的js , 只需要后台将相关的参数 ( timeStamp: '', nonceStr: '', package: '', signType: 'MD5', p ...

  7. Flutter 简介(事件、路由、异步请求)

    1. 前言 Flutter是一个由谷歌开发的开源移动应用软件开发工具包,用于为Android和iOS开发应用,同时也将是Google Fuchsia下开发应用的主要工具.其官方编程语言为Dart. 同 ...

  8. 洛谷 P1012 拼数

    P1012 拼数 标签 字符串 排序 NOIp提高组 1998 云端 难度 普及- 时空限制 1s / 128MB 题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例 ...

  9. 【loj3120】【CTS2019】珍珠

    题目 ​ $laofu $出的题 ​ \(n\)个离散型随机变量\(X_i\)可能的值为\([1,D]\) ,求有至少\(m\)对的概率 ​ $0 \le m \le 10^9  ,  1 \le n ...

  10. 【BIRT】汉化设计器

    点击下面文字即可下载汉化包 birt汉化_plugins.rar 下载完成之后,解压: 将上述文件copy到目录../eclipse/plugins/下即可 文件复制后,重新启动eclipse,则已经 ...