mysql数据库:分表、多表关联、外键约束、级联操作
本文目录:
一、分表、外键、级联、一对多
分表
将部门数据与员工数据放到同一张表中会造成
数据重复
结构混乱
扩展维护性差
需要分表 create table dept(id int primary key auto_increment,name char(),job char());
create table emp(id int primary key auto_increment,name char(),gendr char,age int,salary float,d_id int);

外键
以上代码 可以建立关联关系 但是这个关系是逻辑上的 不实际存在
需要为他建立物理上的关联
通过外键 约束 create table 表名(字段名 类型(长度),foreign key(外键的字段名称) references 对方表名(对方主键名)); 使用外键时 必须分清 主从关系 外键的第一种约束
先建主表
再建从表
create table dept(id int primary key auto_increment,name char(20),job char(20));
create table emp(id int primary key auto_increment,name char(20),d_id int,foreign key(d_id) references dept(id)); 外键的第二个约束
先插入主表
再插入从表 外键的第三个约束
删除记录时
先删除从表记录
再删主表记录 外键的第四个约束
从表更新外键时 必须保证外键是存在的 外键的第五个约束
更新主表的id时
必须先删除从表关联的数据
或者把关联数据 关联其他的主表id 外键的第六个约束
删除主表时 要先删除从表

级联操作
有了这几个约束后 主表和从表中的数据必然是完整的
相应的收到外键约束 主表的删除 更新操作受到限制
很多情况下 我们就是要删除一个部门 然而需要至少两条sql语句 麻烦 可以使用级联
create table emp(
id int primary key auto_increment,
name char(),
d_id int,
foreign key(d_id) references dept(id)
on delete cascade
on update cascade
); on delete cascade 当主表删除记录时 从表相关联的记录同步删除
on update cascade 当主表id更新时 从表相关联的记录同步更新
注意是单向的 主表变化是 级联操作从表 从表的变化不会级联到主表
一对多
一个场景中对应多个对象,想想生活中有哪些例子:一个年级可以有多个班级,古代一个官人可以有多个老婆,一条线可以有多辆公交车等等;
为了区分一对多和多对一,统一口径都叫一对多;即多个班级对应一个班级;
刚才的ehr库中的dept和emp表很好的说明一多的关系,即一个部门有多名员工,多个员工属于一个部门,但仔细想有没有这种情况存在,一个员工身兼数职,有啊!
但这种情况在公司里是少数,那我们举一个简单的公交系统案例:

车辆表中的线路ID外键关联线路表中的id
二、多对多
一个老师可以教多个学生
一个学生可以被多个老师教
老师表和学生表 是多对多的关系
需要一个中间表 专门存储关联关系
create table student(id int primary key auto_increment,name char(15));
create table tsr(
id int primary key auto_increment,
t_id int,s_id int,
foreign key(t_id) references teacher(id),
foreign key(s_id) references student(id)
);
先插入老师和学生数据
insert into teacher values
(1,"水月先生"),
(2,"黄承彦");
(1,"诸葛亮"),
(2,"司马懿");
insert into tsr values
(null,1,1),
(null,1,2),
(null,2,1);

或者


三、一对一
一个客户只能产生一个学生
一个学生只能对应一个客户
这样的关系是一对一
使用外键来关联 但是需要给外键加上唯一约束
客户和学生有主从关系 需要先建立客户 再建学生
name char(20),phonenum char(11),addr char(20));
create table student1(s_id int primary key auto_increment,
name char(20),
class char(11),
number char(20),
housenum char(20),c_id int UNIQUE,
foreign key(c_id) references customer(c_id)
);
原有的person表
st_info
姓名 性别 年龄
身份证 地址 名族 身高 体重 血型 学历 政治面貌 联系方式
当一个表中数据记录太多时 效率会降低 可以采取水平分表 字段完全相同
stu 中有十万数据
stu1 五万
stu2 五万
mysql数据库:分表、多表关联、外键约束、级联操作的更多相关文章
- MySQL数据库 : 查询语句,连接查询及外键约束
查询指定字段 select 字段1,字段2 from 表名; 消除重复行(重复指的是结果集中的所有完全重复行) select distinct 字段1,字段2.. ...
- MySQL删除表的时候忽略外键约束
删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心.但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情:另外在测试的时候,也有需要重新创建 ...
- SQL批量删除用户表(先删除所有外键约束,再删除所有表)
--批量删除用户表 --1.删除外键约束DECLARE c1 cursor for select 'alter table ['+ object_name(parent_obj) + '] d ...
- PHP.30-TP框架商城应用实例-后台6-商品会员价格删除-外键,级联操作
商品会员价格删除 需求:当删除一件商品时,这件商品对应的会员价格也应该从会员价格表{price,level_id,goods_id}中删除掉. 有两种删除方法 1.在钩子函数_before_delet ...
- sql server 2008 外键的级联操作
问题提出:现在我有三张表,学生Student,课程Course,成绩SC 1. 学生表Student,主键是学号Sno 2. 课程Course,主码是课程号Cno 3. 成绩SC,主码是Sno和 ...
- MySQL数据库(3)- 完整性约束、外键的变种、单表查询
一.完整性约束 在创建表时候,约束条件和数据类型的宽度都是可选参数. 作用:用于保证数据的完整性和一致性. 1.not null(不可空)与default 示例一:插入一个空值,如下: mysql&g ...
- mysql 外键约束及表关联
一.MYSQL中的约束 1.主键:primary key 唯一非空的特性并且可以优化查询速度 2.外键:foreign key 外键的作用保证2个或2个以上的数据表的数据一致性和完整性 3.唯一:un ...
- MySQL修改数据库、表、列、外键字符编码和排序编码
在重启Confluence应用时,突然遇见这个检查错误,查询总结需要修改Mysql数据库的所有字符编码和排序编码,报错如下: Confluence Help – This installation o ...
- MySQL数据库(4)_MySQL数据库外键约束、表查询
一.外键约束 创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...
- MySQL删除所有表的外键约束、禁用外键约束
转: MySQL删除所有表的外键约束.禁用外键约束 2017年10月27日 00:11:34 李阿飞 阅读数:4512 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
随机推荐
- Mysql——常用命令
查看版本:show variables like '%version%' 或者 select version() 是否开启binlog:show variables like 'log_bin ...
- centos6.8(虚拟机VNC)输入正确用户名和密码仍跳回登录界面
1)CentOS自动更新到6.8后root无法登陆问题解决 虚拟机CentOS服务器不知道被谁更新系统到6.8后,发现在本机上即使输入正确的密码也无法登陆,发现有一些人也碰见过同样的问题,但是他们是因 ...
- RocketMQ之九:RocketMQ消息发送流程解读
在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...
- 【HTML】常用的标签学习
HTML(HyperText Markup Language )又称超文本标记语言,与一般文本文件不同的是它是由各种标签或标记组成 <标签名></标签名> .所以html的学习 ...
- Windows Server 2019 配置远程桌面授权服务器许可RD
Windows Server 2019 配置远程桌面授权服务器许可RD Windows Server 201默认的最大远程登录连接为2个,超过这个数目需要使用license server进行授权,但又 ...
- 【VS开发】学习VS2010 ------ 多种类型的视图集合CTabView
多种类型的视图集合CTabView 首先利用AppWizard建立工程,然后将视类的基类更改为CTabView,并将所有的CView更改为CTabView. 依次插入以CSrollView.CList ...
- python界面编程
这是一个简单的加法计算器 首先,要先对这个简易计算器进行布局设计,需要两个输入框,还有一个输入框用于存放就算的结果,还需要两个table,一个是"+"一个是"=" ...
- 使用Python执行dos命令并获取输出的结果
import os import subprocess # 第一种 result1 = subprocess.check_output('dir').decode('GBK') print(resul ...
- 使用PowerShell 修改DNS并加入域中
运行环境:Windows Server 2012 R2 此powershell脚本为自动修改本机DNS并加入到域中 但有的时候会提示[本地计算机当前不是域的一部分.请重新执行脚本!]错误,如遇到该错误 ...
- TCP的粘包、半包和Netty的处理
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! 什么是粘包和半包 在客户端发送数据时,实际是把数据写入到了TCP发送 ...