分表:到底是一对多还是多对1要看从那个角度出发分表后需要为表添加关联关系在老师表中的部门编号为1,但是1号部门根本不存在,所以该数据不是一条完整的数据需要通过外键约束,来保证数据只要插入就是完整的数据
create table dept(id int primary key auto_increment,
name char(10),
job char(30));create table teacher(
id int primary key auto_increment,
name char(20),
gender char(10),
dept_id int,
foreign key(dept_id)references dept(id)
);insert into dept values(null,'教育部','教学生');insert into teacher values(null,'老杨','man',1)


在老师表中的部门编号为1 但是1号部门根本不存在 所以该数据不是一条完整数据 需要通过外键约束 来保证数据只能插入 一定是完整的数据如果要将两张表用外键关联起来 一定要区分表的主从关系主表:部门表从表:老师表一定要先建主表 在创建从表

添加外键约束的语法create table 表名称(一堆字段...,foreign key(要设置为外键的字段)references 主表名称(主表字段))
案例:
#部门表
id int primary key auto_increment,
name char(10),
job char(30));#老师表
create table teacher(
id int primary key auto_increment,
name char(20),
gender char(10),
dept_id int,
foreign key(dept_id)references dept(id));


总结外键的作用:当我们把数据分到不同表之后 相互就没有任何联系了,如何才能保证数据完整,需要使用外键约束

外键约束的原理:    让从表的某个字段 参照主表的一个字段(通常是主键 主键是唯一不重复的)    一旦外键关系建立之后,就会产生一系列的约束行为    1.要先创建主表 在创建从表    2.从表插入数据时 必须保证外键的值已经存在外键于主表中    3.删除表时 要先删除从表 再删除主表    4.当要删除主表中的记录时 要保证从表中没有记录    5.主表更新时 如果要更新主键 必须保证从表中没有记录参照这一记录

create table 名称(一堆字段,foreign key(外键字段) references 主表名(主键字段);

从表中外键字段通常是int类型 通常外键都要参照对方的主键

外键是一种约束 是为了保证数据完整性外键就是另一个表的主键外键用于建立物理层级的关联关系

在正常开发中不推荐使用? 会降低存取效率所以一般会把关系的维护交给应用程序 就是逻辑层面的关系

外键可以解决多对一的关联关系一个部门对应多个员工  1 V n多个员工对应一个部门  n V 1上述关系成立 那么一定是多对一在从表中增加一个字段用于关联主表的主键

存在外键关系后 增删改 都收到了各种限制 操作起来较麻烦mysql提供了一个级联操作指的是 当主表发生改变 会同步操作从表级联更新 主表更新了主键时,从表会相应的更新外键的值级联删除 主表删除某一条记录 从表只要外键与被删除的记录主键值相同 则全部删除
# 员工表   id name gender dept_id
# 部门表  id  namecreate table dept(id int primary key auto_increment,name char(20));
create table emp(id int primary key auto_increment,name char(20),gender char(10),dept_id int,foreign key(dept_id) references dept(id));设置级联的语法 在外键后面+on delete cascade和onupdate cascade 可以同时出现也可以单独使用
create table emp(id int primary key auto_increment,name char(20),gender char(10),dept_id int,
foreign key(dept_id) references dept(id) on delete cascade on update cascade
);


一对一关系的处理
案例:
客户表
create table customer(id int primary key auto_increment,
name char(20),
phone char(20),
addr char(50));insert into customer values(null,"渣渣辉","119","苏州");
insert into customer values(null,"陈凯歌","120","北京");学员表
create table student(id int primary key auto_increment,
name char(20),
class char(20),
subject char(20),
foreign key(id) references customer(id));insert into customer values(1,"渣渣辉","py6","python");
insert into customer values(2,"陈凯歌","py6","python");

一对一 关系 不需要增加字段 直接把从表的主键设置为外键即可通常一对一关系 是用来垂直分表的

多对多的关系
案例:
学生表
create table student(id int primary key auto_increment,
name char(20),
gender char(20));老师表
create table teacher(id int primary key auto_increment,
name char(20),
gender char(20),
subject char(29));关系表create table t_s_r(id int primary key auto_increment,s_id int not null,t_id int not null,foreign key(s_id) references student(id),foreign key(t_id) references teacher(id),unique(s_id,t_id));#需要先添加数据到 两个主表 学生和老师
insert into teacher values(1,"渣渣辉","man","python");
insert into teacher values(2,"陈凯歌","man","python");insert into student values(1,"小明","man");
insert into student values(2,"小红","woman");# 添加关系 数据
渣渣辉 教过 小明
insert into t_s_r values(null,1,1);

多对多的处理:添加中间表 添加两个外键 分别关联不同的主表为了保证数据不重复  需要给两个外键添加 联合唯一约束

转载于:https://www.cnblogs.com/gengbinjia/p/10538267.html

表关联关系,表的复制相关推荐

  1. 数据库表关联关系表结构字段命名

    存在SysDictType(字典类型)表和SysDictData(字典数据)表两张表,SysDictType表没有ID字段,是以code作为外键.SysDictData表多对一单向关联SysDictT ...

  2. django orm级联_Django数据表关联关系映射(一对一、一对多、多对多)

    我们知道涉及到数据表之间的对应关系就会想到一对一.一对多.多对多,在学习 MySQL 数据库时表关系设计是需要重点掌握的知识.Django 中定义了三种关系类型的字段用来描述数据库表的关联关系:一对多 ...

  3. python实现跨excel的工作表sheet之间的复制

    百度搜索问题:python复制Excel中的sheet到另外一个工作簿 其中一篇文章: 地址:https://blog.csdn.net/lingan_hong/article/details/727 ...

  4. 3,外键之表关联关系,修改表,复制表

    今日内容:   一:外键    一对多:    多对多:    一对一:   二:了解知识点    复制表    修改表相关操作       前戏:    所有的信息都在一张表中所带来的的问题     ...

  5. mysql查询结果更新到新表_MySQL查询结果复制到新表的方法(更新、插入)

    MySQL中可以将查询结果复制到另外的一张表中,复制的话通常有两种情况,一种是更新已有的数据,另一种是插入一条新记录.下面通过例子来说明.首先构建两个测试表. 表t1: 表t2: 1.如果t2表中存在 ...

  6. 数据库表关联关系的基础知识

    为什么80%的码农都做不了架构师?>>>    表与表之间的关联关系一共有三种类型,一对一.多对一.和多对多,下面我们分别对这三种类型展开进行讨论. 一对一 表示两个表中的数据必须是 ...

  7. 使用Navicat快速复制所有表的表名或字段名

    使用Navicat快速复制所有表的表名或字段名 1.如何拷贝Navicat中的所有表名 show tables; 显示出所有结果,拷贝结果得到所有表的表名,可以选择拷贝所有,也可以选择一部分 (仅my ...

  8. 单库单表到多库多表的全量复制方案

    单库单表到多库多表的全量复制方案 背景 方案 背景 公司最近业务发展比较快速,数据库里面表的数据量猛增,当前单库单表的模型已经无法满足后续业务的发展,需要从单库单表切换到多库多表的模型 方案

  9. MySQL表关联关系

    MySQL表关联关系 一对一 (OneToOne) 一对多 (OneToMany) 多对一 (ManyToOne) 多对多 (ManyToMany) 一对一 MySQL 自动增长 Oracle : 序 ...

  10. JAVA培训之数据库表关联关系

    数据库表的关联关系有如下三种: · 一对多 · 一对一 · 多对多 一对多的关系比较常见,我们在之前练习的都是一对多的关系操作,因此这里就不再重复介绍了. 1.一对一关系 在现实生活中,丈夫与妻子之间 ...

最新文章

  1. 解释i节点在文件系统中的作用?超级块作用?
  2. 之全能忙内_临沧大名山茶:喝过诸多忙肺茶,但你不知道什么是“隔年香”
  3. python中字符串的几种表达方式(用什么方式表示字符串)
  4. .Net Micro Framework研究—串口部署释疑
  5. 设计模式(二)--单例模式
  6. 自己写的微信小程序炸金花简单版
  7. 每天一道剑指offer-链表中环的入口节点
  8. 基于热传导方程的高温作业专用服装设计(一)
  9. 耳机在Mac上听不到声音怎么办?
  10. 苹果最强芯片M1 Ultra亮相!两个M1 Max胶水拼接,性能爆表
  11. 【温故而知新】计算机408之计算机网络速记
  12. 自学简单编程可行吗?
  13. 旗正规则引擎的产品设计
  14. 【Unity】那些你不得不用的好插件!
  15. storm风暴英雄 tempo_迎接《风暴英雄》世界锦标赛季中大乱斗
  16. 【论文阅读】PAIRWISE LINKAGE FOR POINT CLOUD SEGMENTATION-ISPRS-luxiaohu
  17. c语言解引用运算符,C++ 解引用(*)和箭头(-)运算符的重载
  18. java中的JDBC是什么
  19. ZOJ 3952 Fibonacci Sequence Chicken Edition
  20. spring security 3配置ACL时报java.lang.NoSuchMethodError: net.sf.ehcache.Cache.init

热门文章

  1. 2349 Arctic Network prim最小生成树 基础
  2. 苹果mac矢量图形设计软件:Illustrator
  3. OmniPlan Pro 4 for Mac(项目流程管理工具)
  4. Broadcom Wi-FiWl及brcmfmac驱动程序含有众多安全漏洞
  5. 编码Ascii;unicode; utf-8;utf-16;utf-32;gb2312;gbk
  6. flume 整合kafka
  7. 在windows下使用cmd命令行对java文件进行编译和执行
  8. Oracle下sqlplus无法使用命令退格删除和历史记录的解决方法--使用rlwrap
  9. 协同OA融入ERP 高端应用助企业升级转型
  10. 信息安全等级保护工作概述