表关系管理

关注公众号“轻松学编程”了解更多。

1、概述

​ 表与表之间的关系可以是一对一、一对多、多对一的。通过外键把表连接起来,外键放在任意一张表都可以,通常选择由从表(相对次要的表)来持有外键(因为一旦删除数据,删除从表,外键也一并被删除,主表不会留下脏数据)。

课程表:

学生表:

选课表:

选课表:就是中间表。

表关系管理之多对多:通过中间表进行管理,中间表同时持有双方外键,中间表的主键是双方外键的联合主键

创建【学生_课程】中间表
create table student_course(
sid integer not null,

cid integer not null,

primary key (sid,cid)
);

– 如果没有设置主键,可以通过修改表字段的方式来添加【联合主键】
– alter table student_course add constraint s_c primary key (sid,cid);

Create Table
CREATE TABLE student_course ( sid int(11) NOT NULL, cid int(11) NOT NULL, PRIMARY KEY (sid,cid)) E

2、外键管理

2.1 定义外键

foreign key 从表名(classid) references 主表名(id)

create table s_orderform(
o_id int auto_increment primary key,
o_buyer_id int,
o_seller_id int,
o_totalprices double,
o_state varchar(50),
o_information varchar(200),
foreign key(o_buyer_id) references s_user(u_id), #外链到s_user表的u_id字段
foreign key(o_seller_id) references s_user(u_id) #外链到s_user表的u_id字段
)
2.2 追加外键
方法一:
ALTER TABLE student ADD CONSTRAINT FK_student_aclass
FOREIGN KEY student(classid) REFERENCES aclass(id); 方法二:
ALTER TABLE temp ADD FOREIGN KEY temp(cid) REFERENCES clazz(id);
2.3 删除外键
show create table student; --找出classid对应的外键名称
alter table student drop foreign key FK_student_aclass; 删除外键名称
alter table student drop classid;

这样定义外键使用起来不够灵活,不能够给外键设置默认值,外键中的值必须是主表中存在的。在实际应用中给从表设置一个键,直接用来当作外键使用,不用加外键(foreign key)修饰。

3、范例

以身份证idcard、学生student、班级clazz、课程course为例进行表关系管理。
表关系包括一对一、一对多、多对多。通过外键对表关系进行管理,外键放在哪张表中都可以,一般存在不是很重要的那张表中。
例如:
1、表idcard与student是一对一的关系,一个学生对应一个身份证。

create table idcard(
id int primary key auto_increment,
cardId varchar(20) unique,
foreign key(id) references student(id)
);

2、表student与clazz是一对多的关系,一个班级可以有多个学生

create table clazz(
id int primary key auto_increment,
cName varchar(20) unique not null,
cTeacherCharge varchar(20) null,
cNum int
);
create table student(
id int primary key auto_increment,
sName varchar(20) unique not null,
age int,
gender tinyint(1) default null,
enterTime datetime,
foreign key(id) references clazz(id)
);

3、表student与course是多对多的关系,一个学生可以选择多门课,一门课可以被多个学生选择

create table course(
id int primary key auto_increment,
name varchar(20) unique not null,
);

创建中间表student_course

create table student_course(
sid int not null,
cid int not null,
primary key(sid,cid)
);

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

mysql管理表关系的更多相关文章

  1. Mysql多表关系

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

  2. MySQL之表关系

    MySQL表关系 一对多关系 一对多与多对一是一个概念,指的是一个实体的某个数据与另外一个实体的多个数据有关联关系. 举例,学校中一个学.院可以有很多的学生,而一个学生只属于某一个学院(通常情况下), ...

  3. MySql 多表关系

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

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

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

  5. MySQL之表关系与范式

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

  6. mysql管理---表分区

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分 ...

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

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

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

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

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

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

随机推荐

  1. IIS目录浏览模式打开文件还是无法下载

    写在前面的话 IIS已经设置目录浏览启用,且可以正常访问到文件,说明这些设置没问题,但是点击文件进行下载时,却提示无法下载,文件不存在等等,有的又可以,一顿操作后发现,原来是文件类型没有包含在MIME ...

  2. FastDFS 分布式文件系统详解

    什么是文件系统 文件系统是操作系统用于在磁盘或分区上组织文件的方法和数据结构.磁盘空间是什么样的我们并不清楚,但文件系统可以给我们呈现一个非常清晰的表象,我们可以创建.删除.修改和复制这些文件,而实现 ...

  3. Go 数组&切片

    数组相关 在Go语言中,数组是一种容器相关的数据类型,用于存放多种相同类型的数据. 数组定义 在定义数组时,必须定义数组的类型以及长度,数组一经定义不可进行改变. 同时,数组的长度是按照元素个数进行统 ...

  4. 一文搞懂AQS及其组件的核心原理

    @ 目录 前言 AbstractQueuedSynchronizer Lock ReentrantLock 加锁 非公平锁/公平锁 lock tryAcquire addWaiter acquireQ ...

  5. 开始在Windows上开发Android

    介绍 鉴于您正在阅读这篇文章,您很可能已经知道android是什么了.可能.在科幻小说和电影中,机器人本质上是具有拟人化特征的机器人.还记得<星球大战>里的C-3PO吗?那<星际迷航 ...

  6. 在SpringBoot项目中怎样引入.yml文件中的设置

    SpringBoot中获取application.yml文件内容 原始方式pro.load()与 pro.getProperty()配合的方式 @Value注解方式 @ConfigurationPro ...

  7. 多测师讲解接口测试 _postman(上)_高级讲师肖sir

    Postman 一.Postman介绍 Postman是一个网页调试工具,也可以调试css.html Postman的操作环境 环境:Postman Mac.Windows X32.Windows X ...

  8. java基础知识总结(续写)

    1.两个容易搞混的C盘文件夹 文件名 描述 Progrm Files 默认存储的64位软件 Progrm Files(x86) 默认存储32位软件 2.常用基础DOS命令(Windows+R打开命令) ...

  9. day13 Pyhton学习

    一.昨日内容回顾 生成器 本质就是迭代器 特点: 1.省内存 2.惰性机制 3.只能向前,不能反复 生成器函数 函数中包含yield. yield表示返回和return,分段执行一个函数 def fu ...

  10. 0基础如何更快速入门Linux系统?学完Linux有哪些就业方向?

    Linux系统是使用Linux内核及开源自由软件组成的一套操作系统,是一种类UNIX系统,其内核在1991年10月5日由林纳斯·托瓦兹首次发布. 它的主要特性:Linux文件一切皆文件.完全开源免费. ...