mysql表的级联操作_mysql表之间的关系及级联操作
表之间的关系
foreign key
外键约束,用于指向另一个表的主键字段
# 创建表的时候添加外键
create table teacher(
id int primary key auto_increment,
name char(20),
gender char(1),
dept_id int,
foreign key(dept_id) references dept(id)
);
解释:
foreign key(dept_id) references dept(id)
dept_id 表示当前表的外键字段
dept 表示要关联哪个表
dept(id) id表示关联的dept表的id字段
主表与从表
先有主表 再有从表
先有dept 再有teacher
foreign key 带来的约束作用:
1.在从表中插入一条记录,关联了一个主表中不存在的id 导致插入失败
必须保证部门id (外键的值) 必须是在主表中存在的
2.插入数据的顺序
先插入主表记录 在插入从表记录
3.从表更新外键时也必须保证 外键的值在主表中是存在的
4.删除主表记录前 要保证从表中没有外键关联被删除的id
delete from dept where id = 1;# 报错
必须先删除从表 再删除主表
delete from teacher where dept_id = 1;
delete from dept where id = 1;
5.更新主表记录的主键时 要保证从表中没有外键关联被删除的id
6.必须先创建主表
7.删除表 必须先删除从表
强调:foreign key就是用来保证两张表之间的关联关系是正确的!
练习: 班级表 和 学员表
主表是班级
从表是学员 外键加给学员
create table class(
id int primary key auto_increment,
name char(20)
);
create table student(
id int primary key auto_increment,
name char(20),
gender char(1),
c_id int,
foreign key(c_id) references class(id)
);
级联操作 cascade
当我们需要删除部门(主表)信息 时,必须先删除从表中关联的数据,很麻烦
级联操作指的就是,当你操作主表时,自动的操作从表
两种级联操作
1.级联的删除
当删除主表时自动删除从表中相关数据
2.级联更新
当主表的主键更新时自动的更新关联的从表数据
案例:以上面的班级个学员为例:
drop table if exists class;
# 如果这表存在 才执行删除 可以避免报错 if exists
# if not exists 如果不存在才执行
create table class(
id int primary key auto_increment,
name char(20)
);
insert into class values(null,"py9");
insert into class values(null,"py10");
#创建表的时候指定级联操作
drop table if exists student;
create table student(
id int primary key auto_increment,
name char(20),
gender char(1),
c_id int,
foreign key(c_id) references class(id)
on update cascade
on delete cascade
);
# 级联操作可以单独使用 也可以一起使用 空格隔开即可
insert into student values(null,"jack","m",1);
insert into student values(null,"rose","m",1);
insert into student values(null,"tom","m",2);
外键的使用
什么时候使用外键:
表之间存在关联关系 ,
首先要确定表之间的关系:
多对一
一对多(多对一)
或者
老师和部门的关系
老师的角度看
一个老师应该对应有一个部门
一个老师可以对应对多个部门? 不行 一个老师只能属于一个部门 (要看具体业务要求)!
多个老师可以对应一个部门
多对一
部门的角度看
一个部门可以对应多个老师
一个部门可以对应一个老师
多个部门可以对应一个老师? 不行
一对多
如何处理一对多(多对一)?
在老师表中存储 部门id
即多的一方存储 一的一方的id
处理方式
在一的一方即teacher表中保存相应部门(多的一方)的编号;
案例:
#部门:
create table dept(
id int primary key auto_increment,
name char(20),
job char(50),
manager char(10)
);
#老师表:
create table teacher(
id int primary key auto_increment,
name char(20),
gender char(1),
dept_id int,
foreign key(t_id) references teacher(id),
);
mysql表的级联操作_mysql表之间的关系及级联操作相关推荐
- mysql表操作_MySQL表操作语句用法百科
本文采用MySQL5.7.26版本 1 建表语句 建表语句create语法如下: 1.1 设置unsigned unsigned设置数值类型是否为无符号数,可以为空,如下举例: 1.2 设置默认值 d ...
- mysql如何让表建立连接吗_MySQL 表与表之间建立关系
引子:如下图是一张非常寻常的表格,在以前的工作中实常会制作类似的表格,但是今天的数据库内容,将我之前这种传统的制表思路上升了一个层次: 今天核心的内容就是怎样让表与表之间产生关系,在思考这个问题的时候 ...
- mysql表文件被删_mysql表物理文件被误删的解决方法
前言 1.该方法只介绍了如何救回这个表名(数据不恢复) 如果想要恢复原来数据 直接用extundelete把文件恢复后放回去即可 2.并且是适用于平时没有全备的情况下 如果有全备 直接那全备的frm ...
- mysql为什么要重建索引_MySQL表索引为什么会遭破坏?
此文章主要向大家描述的是MySQL表索引被破坏的问题的产生缘由,以及针对这一问题我们给出其具体的解决方案,下面的文章就是对其相关内容的具体介绍,希望在你今后的学习中会有所帮助. 下午上班,惊闻我的de ...
- mysql创建外键级联更新_MySQL中利用外键实现级联删除、更新
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作 ...
- mysql中外键设置级联删除_MySQL中利用外键实现级联删除、更新
MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在 创建索引的时候,可以指 ...
- 从块结构谈表的存储参数与性能之间的关系
摘要:自从开始在微信公众号写点小东西,老白每天早上到公司的第一件事是洗手.泡茶.看方方的武汉日记,然后就想今天写点 自从开始在微信公众号写点小东西,老白每天早上到公司的第一件事是洗手.泡茶.看方方的武 ...
- cdn与服务器的关系_域名解析、CDN 加速、服务器绑定域名之间的关系及如何操作?...
域名解析.CDN 加速和服务器绑定域名之间的关系是什么?又是如何操作的呢?对于很多新同学来说,经常会把域名解析.CDN 加速和服务器端 IP 弄混淆.在和新同学沟通的过程中,老魏发现部分同学是越听脑子 ...
- mysql一张表可以用吗_MySQL表操作
一.存储引擎 不同的数据应该有不同的处理机制 mysql存储引擎: Innodb:默认的存储引擎,查询速度较myisam慢,但是更安全 myisam:mysql老版本用的存储引擎 memory:内存引 ...
最新文章
- Linux定时程序没有之行完,如何在linux上定时执行程序
- 本地jar文件中搜索class
- hihocoder 1638:多级并查集
- Testng 测试框架源码阅读(二)
- Fix error message: maven error: package org.junit does not exist
- 扎心!程序员泪奔的8个瞬间
- 开发环境 Minio 添加桶的操作流程-页面操作
- mybatis 逆向工程生成的 Example 类的使用
- Java IO流总结
- python 状态模式_使用状态模式自由切换登录状态
- 二十三种设计模式详解
- 对中文版“Siri”打个招呼吧!
- python自动生成报告_python实现自动生成oracle awr报告
- unix环境高级编程——UNIX体系架构
- magisk下载里显示没有模块_magisk框架
- jquery 3D旋转banner图效果 demo
- 2021年IT互联网高薪职位大盘点
- c++中rand(),srand()使用
- Android App内存泄露测试方法总结
- IO流原理及流的分类