表关系管理

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

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. Python-随机模块-random

    random 生成随机变量 生成 [0, 1) 随机数 .random import random random_number = random.random() print(random_numbe ...

  2. chrome浏览器的两个坑,以及其他

    chrome打开本地网页时,不能保存cookiechrome拒绝使用ajax访问本地文件(火狐可以) ipinfo.io/ip 获得公网iphttps://v1.hitokoto.cn/ 获得一句动漫 ...

  3. 再玩树莓派(二)Jexus&.NetCore

    接上一篇,操作系统弄好之后,轮到开发运行环境的搭建. 先说说目标,也就是我到底想搞什么飞机.先说说小目标吧. 现有一个手机App客户端,以答题小游戏作为其内容(例如:口算题,24点,科学百科等) 树莓 ...

  4. 深入解读 ASP.NET Core 身份认证过程

    长话短说:上文我们讲了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程. 授权是确定用户是否 ...

  5. python中的filter、map、reduce、apply用法总结

    1. filter 功能: filter的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数. 调用: filter(function,seq ...

  6. P4231 三步必杀

    题目描述 问题摘要: N个柱子排成一排,一开始每个柱子损伤度为0. 接下来勇仪会进行M次攻击,每次攻击可以用4个参数l,r,s,e来描述: 表示这次攻击作用范围为第l个到第r个之间所有的柱子(包含l, ...

  7. 《New Horizon College English》 (Third Edition) -长篇阅读(Skmming and Scanning)

    <New Horizon College English>(Third Edition) <新视野大学英语>(第三版) 长篇阅读(Skmming and Scanning) 总 ...

  8. kafka配置文件详解

    kafka的配置分为 broker.producter.consumer三个不同的配置 一 .BROKER 的全局配置最为核心的三个配置 broker.id.log.dir.zookeeper.con ...

  9. 多测师讲解自动化测试 _RF课堂_定位详解(002上午)_高级讲师肖sir

    1,打开克览器 2.id定位 Input Text id=kw 我是id定位 #id定位方法 3.name定位 Input Text name=wd 我是name定位方法 #我是name定位方法 4. ...

  10. selenium登录163邮箱,得到cookie,requests后续请求

    1.场景 很多时候登录操作是比较复杂的,因为存在各种反爆破操作,以及为了安全性提交数据都会存在加密.如果要完全模拟代码去实现登录操作是比较复杂,并且该网站后续更新了登录安全相关功能,那么登录的模拟操作 ...