博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表关联关系,表的复制
阅读量:4691 次
发布时间:2019-06-09

本文共 3283 字,大约阅读时间需要 10 分钟。

分表: 到底是一对多还是多对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

你可能感兴趣的文章
自动附加Sqlserver数据库
查看>>
02.设计模式
查看>>
LeetCode 371. Sum of Two Integers
查看>>
ZBrush功能特性之法线贴图
查看>>
virtualbox虚拟机ubuntu操作系统,设置网络互通、访问,能访问虚拟机swoole的http服务...
查看>>
磁盘inode节点被占满的解决方法
查看>>
js 中对象属性的特性
查看>>
周四的工作 张孝祖
查看>>
怎么教软件工程课的看法
查看>>
mac下mysql安装及配置启动
查看>>
PAT 甲级 1020 Tree Traversals (二叉树遍历)
查看>>
安全增强 Linux (SELinux) 剖析
查看>>
防御性编程
查看>>
软件开发工程师必须知道的20个常识
查看>>
OC各种遍历方法的效率比较
查看>>
saiku 网站简介
查看>>
Web Browser 的扩展
查看>>
版本控制,批量修改文件重命名
查看>>
iOS 富文本所有的NSAttributedStringKey
查看>>
JavaScript-页面打印正方形,各种三角形与菱形
查看>>