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. Linux常用命令学习一

    rpm -qa |grep jdk:查询系统中是否有存在jdk的rpm已安装程序: rpm -e --nodeps jdk1.8:卸载jdk1.8的程序: rpm -ivh rpm文件:安装rpm文件 ...

  2. 微信小程序~Flex布局

    有一点需要注意的是,你的小程序要求兼容到iOS8以下版本,需要开启样式自动补全.开启样式自动补全,在“设置”—“项目设置”—勾选“上传代码时样式自动补全”.

  3. NOI2019游记 —— 夏花般绚烂,繁星般璀璨

    NOI 2019 游记 夏花般绚烂,繁星般璀璨 打算写成两个形式 Dairy Day -1 早早就到gzez集训了20几天,对整体的环境熟悉很多 在gzez看了场LNR Day 2 然后回到宾馆搞了个 ...

  4. GO语言开发之路

    Go语言开发之路 介绍 为什么学习Go语言? 开发环境准备 从零开始搭建Go语言开发环境 VS Code配置Go语言开发环境 基础 Go语言基础之变量和常量 Go语言基础之基本数据类型 Go语言基础之 ...

  5. Java 内部类和Lambda

    Java内部类 内部类又称为嵌套类,是在类中定义另外一个类.内部类可以处于方法内/外,内部类的成员变量/方法名可以和外部类的相同.内部类编译后会成为完全不同的两个类,分别为outer.class和ou ...

  6. Scanner的常用用法

    通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner. s.useDelimiter(" |,|\ ...

  7. c++读写matlab中.mat数据

    前言:在进行图形图像处理时,经常会用到matlab进行算法的仿真验证,然后再移植到别的语言中.有时会涉及到数据的交互,比如直接读取matlab的.mat类型数据,或者是将c++中的数组存为.mat,为 ...

  8. 关于System.ArgumentNullException异常

    什么是ArgumentNullException 当将 null 引用(Visual Basic 中为 Nothing)传递到不接受其作为有效参数的方法时引发的异常. 继承 Object Except ...

  9. ipcs

    用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表.共享内存和信号量的信息

  10. Cogs 732. [网络流24题] 试题库(二分图)

    [网络流24题] 试题库 ★★ 输入文件:testlib.in 输出文件:testlib.out 评测插件 时间限制:1 s 内存限制:128 MB «问题描述: 假设一个试题库中有n道试题.每道试题 ...