表关系管理

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

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练习题 003:完全平方数

    [Python练习题 003]一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? --------------------------------------- ...

  2. 「面试」拿到B站的意向书

    此次B站服务端开发面试之旅可谓惊险,不过通过对大部分面试题套路的掌握,不出意外还是拿下了,下面我们来看看这些骚题是不是常见的不能再常见的了.这些面试题看了就能面上?当然不是,只是通过这些题让自己知道所 ...

  3. unity 3d 三、空间与运动

    3D游戏编程第三次作业 简答并用程序验证[建议做] 游戏对象运动的本质是什么? 游戏对象运动的本质是游戏对象Position.Rotate.Scale属性数值的变化. 请用三种方法以上方法,实现物体的 ...

  4. JDK1.8新特性之(二)--方法引用

    在上一篇文章中我们介绍了JDK1.8的新特性有以下几项. 1.Lambda表达式 2.方法引用 3.函数式接口 4.默认方法 5.Stream 6.Optional类 7.Nashorm javasc ...

  5. matlab receive License Manager Error -103?

    参考:https://www.mathworks.com/matlabcentral/answers/91874-why-do-i-receive-license-manager-error-103 ...

  6. Eclipse 设置Tab键为4个空格

    参考:java编程规范之eclipse设置tab键为四个空格 Eclipse版本 1.点击菜单Window > Preference 2.在Preferences窗口中,展开General &g ...

  7. SSIS 生成文件

    程序说明 此SSIS的目标是生成如下的文本文件 此文件的列由TAB键分割,可以使用notepad++来查看 这样就能够看清TAB键了 文件由%H%表示头部和%D%表示的细节部分 以下为程序开发使用的V ...

  8. vue的二级联动,数据是从php获取到的

    1.首先,一级要有change改变事件的关键字,v-on:change="selectarr($event)" 这是created(){}函数里面的自动调用一级分类的数据 html ...

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

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

  10. 慕课网go语言体系课抢先体验

    慕课网go语言体系课抢先体验,课程分四个阶段: <第一阶段go语言基础语法篇>,从go语言基础语法篇讲起,go语言环境集成,常用开发工具集成,常用数据类型讲解,流程控制,函数,结构体,方法 ...