Mysql数据库 8.SQL语言 外键约束
一、外键约束
外键约束——将一个列添加外键约束与另一张表的主键(唯一列)进行关联之后,这个外键约束的列添加的数据必须要在关联的主键字段中存在
案例

创建原则:先创建不含外键的表也就是班级表
添加外键的方式


一般使用第一种,第二种主要用于修改已创建的表为副表,当约束再添加时,也应起名字。
constraint 自定义关键字约束名 foreign key(字段名) references 表名(字段名);
constraint FK_STUDENTS_CLASSES foreign key(cid) references classes(class_id)
代码实现:
#使用数据库
use fine;#展示数据库
show databases;#展示当前数据库所有表
show tables;#创建数据库
create database db_test1;#使用新建数据库
use db_test1;#显示数据库中某表
desc classes ;#先创建不包含外键的表
create table classes(class_id int(20) primary key auto_increment,#自增操作class_name varchar(40) not null unique,class_remark varchar(200)
);#添加外键表方式一
#创建对应关联的学员表 包含外键
create table students(stu_num char(8) primary key,#主键约束stu_name varchar(20) not null,#非空约束stu_gender char(2) not null,#非空约束stu_age int not null,#不为空cid int not null unique,#约束符合实际constraint FK_STUDENTS_CLASSES foreign key(cid) references classes(class_id)
);#删除表
drop table students ;
drop table classes ;#已经创建好表如何进行修改
#添加外键表方式二 创建表再修改
#创建对应关联的学员表
create table students(stu_num char(8) primary key,#主键约束stu_name varchar(20) not null,#非空约束stu_gender char(2) not null,#非空约束stu_age int not null,#不为空cid int not null unique#要与另一表中的主键类型对应
);#修改表数据,添加约束,具体的约束名称,关联的表和关联的属性
alter table students add constraint
FK_STUDENTS_CLASSES foreign key(cid)
references classes(class_id);#添加班级数据
insert into classes(class_name,class_remark) values('Java2201','.......');
insert into classes(class_name,class_remark) values('Java2202','.......');
insert into classes(class_name,class_remark) values('Java2203','.......');
insert into classes(class_name,class_remark) values('Java2204','.......');
insert into classes(class_name,class_remark) values('Java2205','.......');
insert into classes(class_name,class_remark) values('C++2206','.......');#添加学员数据
insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220101','张三','男',20,1);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220102','李四','女',19,2);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220103','王五','男',21,3);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220104','赵六','女',22,5);#class表映射于students表中,共有两种方式,可以在创建时约定外键,也可以先创建在修改
二、外键约束——级联
与其他表进行关联了的数据,不能进行修改和删除操作
如何修改与其他表关联了的表数据?
1.将引用了表字段的学生记录中的关联字段修改为NULL;
2.在修改班级信息表中课程信息的id编号
3.在表中关联字段设置为NULL的记录的数据关联字段重新修改为引用字段的新id

代码实现
显示某表
select * from 表名;
显示students表
select * from students s ;

显示班级表
select * from classes c ;

修改操作
update 表名 set 修改的字段 = 修改为 where 限制条件;
update classes set class_id = 7 where class_name ='C++2206';
update classes set class_name = 'Java2206' where class_name ='C++2206';
update classes set class_id = 6 where class_name ='Java2206';

如何修改与其他表关联了的表数据?
——分为三步
#1.先取消此条数据的主外键关系,让外键的id值=null
update students set cid=null where cid = 3;
#2.再更改classes表中曾经引用的班级数据id=7
update classes set class_id =7 where class_name = 'Java2206';
#3.再重新让students表中的数据cid进行外键引用新的id值7
update students set cid=7 where stu_num =20220104;
一步实现:用级联操作实现
#级联操作
#删除students表的外键约束
alter table students drop foreign key FK_STUDENTS_CLASSES;#重新给students表添加外键约束,但是同时要设置级联的修改和删除
alter table students add constraint FK_STUDENTS_CLASSES
foreign key(cid) references classes(class_id)
on update cascade on delete cascade;#添加级联操作,修改/删除一张表时,另一张表会同时修改#级联关系改变时,另一条与他关联的数据也会进行改变
update classes set class_id=3 where class_name ='Java2203';#删除一关联的表
delete from classes where class_id=1;

级联操作:指的是先去删除原有的外键,再去添加外键,并设置级联关系
再去修改/删除时,关联的两条数据同时操作
实现过程



#使用数据库
use fine;#展示数据库
show databases;#展示当前数据库所有表
show tables;#创建数据库
create database db_test1;#使用新建数据库
use db_test1;#显示数据库中某表
desc classes ;#1.先创建不包含外键的表
create table classes(class_id int(20) primary key auto_increment,#自增操作class_name varchar(40) not null unique,class_remark varchar(200)
);#2.添加外键表方式一
#创建对应关联的学员表 包含外键
create table students(stu_num char(8) primary key,#主键约束stu_name varchar(20) not null,#非空约束stu_gender char(2) not null,#非空约束stu_age int not null,#不为空cid int not null unique,#约束符合实际constraint FK_STUDENTS_CLASSES foreign key(cid) references classes(class_id)
);#删除表
drop table students ;
drop table classes ;#1.先创建不包含外键的表
create table classes(class_id int(20) primary key auto_increment,#自增操作class_name varchar(40) not null unique,class_remark varchar(200)
);#3.已经创建好表如何进行修改
#添加外键表方式二 创建表再修改
#创建对应关联的学员表
create table students(stu_num char(8) primary key,#主键约束stu_name varchar(20) not null,#非空约束stu_gender char(2) not null,#非空约束stu_age int not null,#不为空cid int #要与另一表中的主键类型对应
);#修改表数据,添加约束,具体的约束名称,关联的表和关联的属性
alter table students add constraint
FK_STUDENTS_CLASSES foreign key(cid)
references classes(class_id);#添加班级数据
insert into classes(class_name,class_remark) values('Java2201','.......');
insert into classes(class_name,class_remark) values('Java2202','.......');
insert into classes(class_name,class_remark) values('Java2203','.......');
insert into classes(class_name,class_remark) values('Java2204','.......');
insert into classes(class_name,class_remark) values('Java2205','.......');
insert into classes(class_name,class_remark) values('C++2206','.......');#添加学员数据
insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220101','张三','男',20,1);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220102','李四','女',19,2);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220103','王五','男',21,3);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220104','赵六','女',22,3);#class表映射于students表中,共有两种方式,可以在创建时约定外键,也可以先创建在修改#外键约束————级联
#简单理解:当前两表中关联的数据如要修改需要同步操作
select * from students s ;
select * from classes c ;#修改操作
update classes set class_id = 7 where class_name ='C++2206';
update classes set class_name = 'Java2206' where class_name ='C++2206';
update classes set class_id = 6 where class_name ='Java2206';#关联了的数据,不能进行修改和删除操作
#1.先取消此条数据的主外键关系,让外键的id值=null
update students set cid=null where cid = 3;
#2.再更改classes表中曾经引用的班级数据id=7
update classes set class_id =7 where class_name = 'Java2206';
#3.再重新让students表中的数据cid进行外键引用新的id值7
update students set cid=7 where stu_num =20220104;#级联操作
#删除students表的外键约束
alter table students drop foreign key FK_STUDENTS_CLASSES;#重新给students表添加外键约束,但是同时要设置级联的修改和删除
alter table students add constraint FK_STUDENTS_CLASSES
foreign key(cid) references classes(class_id)
on update cascade on delete cascade;#添加级联操作,修改/删除一张表时,另一张表会同时修改#级联关系改变时,另一条与他关联的数据也会进行改变,将班级名为Java2203的班级,班级序号改为3
update classes set class_id=3 where class_name ='Java2203';#删除一关联的class_id=1的表;
delete from classes where class_id=1;
相关文章:
Mysql数据库 8.SQL语言 外键约束
一、外键约束 外键约束——将一个列添加外键约束与另一张表的主键(唯一列)进行关联之后,这个外键约束的列添加的数据必须要在关联的主键字段中存在 案例 创建原则:先创建不含外键的表也就是班级表 添加外键的方式 一般使用第一…...
ERROR in static/js/xxx.js from UglifyJs Unexpected token name «currentVersion»
添加链接描述 ERROR in static/js/xxx.js from UglifyJs Unexpected token name currentVersion, expected punc 遇到这种异常, 需要运行下面脚本运行npm i -D uglifyjs-webpack-pluginbeta修改webpack.prod.conf.jsjs中引入参数const UglifyJsPlugin require(uglifyjs-webpa…...
反序列化 [网鼎杯 2020 青龙组]AreUSerialz 1
打开题目 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {protected $op;protected $filename;protected $content;function __construct() {$op "1";$filename "/tmp/tmpfile";$content "Hello World!&qu…...
JWT登录校验
工作原理 下面来详细看看 UTF-8 是如何工作的,以及为什么它会根据被编码的字符具有不同的长度。 一、JWT是什么? 在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程: 1、客户端使用用户名和密码请求登录 2、服务端…...
python发送企业微信群webhook消息(文本、文件)
import datetime import os import time from copy import copyimport requests from loguru import logger from urllib3 import encode_multipart_formdataclass WeiXin_Robot:def __init__(self,url: str ""):# 测试cartest_url "https://qyapi.weixin.qq.…...
高数笔记06:无穷级数
图源:文心一言 时间比较紧张,仅导图~~🥝🥝 第1版:查资料、画导图~🧩🧩 参考资料:《高等数学 基础篇》武忠祥 🐳目录 🐳常数项级数 🐋概要 &…...
Android工具栏ToolBar
主流APP除了底部有一排标签栏外,通常顶部还有一排导航栏。在Android5.0之前,这个顶部导航栏以ActionBar控件的形式出现,但AcionBar存在不灵活、难以扩展等毛病,所以Android5.0之后推出了ToolBar工具栏控件,意在取代Aci…...
2.3 - 网络协议 - ICMP协议工作原理,报文格式,抓包实战
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 ICMP协议 1、ICMP协议工作原理2、ICMP协议报文格式…...
北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑
近几年随着互联网快速发展,各行业领域都比较注重线上服务系统,通过陪诊小程序开发可以满足更多用户使用需求,同时还能提高用户使用体验。现在陪诊类的软件应用得到全面推广,在医疗行业当中陪诊小程序更贴近用户生活,可…...
前端面试题总结(一)
1. vue性能优化 v-if和v-show使用:频繁切换使用v-show(display样式),反之使用v-if(删除与新值DOM)v-for必须加key,不能使用index当作key(使用index,如果数组发生变化&am…...
LeetCode107. Binary Tree Level Order Traversal II
文章目录 一、题目二、题解 一、题目 Given the root of a binary tree, return the bottom-up level order traversal of its nodes’ values. (i.e., from left to right, level by level from leaf to root). Example 1: Input: root [3,9,20,null,null,15,7] Output: […...
【大模型应用开发教程】04_大模型开发整体流程 基于个人知识库的问答助手 项目流程架构解析
大模型开发整体流程 & 基于个人知识库的问答助手 项目流程架构解析 一、大模型开发整体流程1. 何为大模型开发定义核心点核心能力 2. 大模型开发的整体流程1. 设计2. 架构搭建3. Prompt Engineering4. 验证迭代5. 前后端搭建 二、项目流程简析步骤一:项目规划与…...
【Unity ShaderGraph】| 快速制作一个 表面水纹叠加效果
前言 【Unity ShaderGraph】| 快速制作一个 表面水纹叠加效果一、效果展示二、表面水纹叠加效果三、应用实例 前言 本文将使用ShaderGraph制作一个表面水纹叠加效果,可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章:【Unity Sh…...
大模型的实践应用5-百川大模型(Baichuan-13B)的模型搭建与模型代码详细介绍,以及快速使用方法
大家好,我是微学AI,今天给大家介绍一下大模型的实践应用5-百川大模型(Baichuan-13B)的模型搭建与模型代码详细介绍,以及快速使用方法。 Baichuan-13B 是由百川智能继 Baichuan-7B 之后开发的包含 130 亿参数的开源可商用的大规模语言模型,在权威的中文和英文 benchmark 上均…...
用友U8定制版在集简云:无需API即可集成客服系统和用户运营
无代码开发的新时代 在这个信息化、自动化的时代,无代码开发已经成为一种新的趋势。集简云就是这样的一款工具,可以轻松连接用友U8 定制版与近千款软件系统,无需开发、无需代码知识就可以打通各种软件之间的数据连接,构建自动化与…...
APP埋点:页面统计与事件统计
我们平时所说的埋点,可以大致分为两部分,一部分是统计APP页面访问情况,即页面统计;另外一部分是统计APP内的操作行为,及自定义事件统计。 一、页面统计 页面统计,可以统计应用内各个页面的访问次数&#x…...
Kotlin学习笔记-Kotlin基础-01
变量声明 var:用于值不改变的变量,使用val声明的变量无法重新赋值 val:用于值可以改变的变量 变量声明格式 var/val data(变量名称) : Int(变量类型) Kotlin基本数据类: Int、Byte、Short、Long、Float、Double Kotlin类型推…...
gma 1.x 气候气象指数计算源代码(分享)
本模块的主要内建子模块如下: 如何获得完整代码: 回复博主 或者 留言/私信 。 注意:本代码完全开源,可随意修改使用。 但如果您的成果使用或参考了本段代码,给予一定的引用说明(非强制)…...
酒水展示预约小程序的效果如何
酒的需求度非常高,各种品牌、海量经销商组成了庞大市场,而在实际经营中,酒水品牌、经销商、门店经营者等环节往往也面临着品牌传播拓客引流难、产品展示预约订购难、营销难、销售渠道单一等痛点。 那么商家们应该怎样解决呢? 可以…...
蓝桥杯练习
即约分数 题目 思路 遍历所有的x,y,判断x/y是不是即越约分数。 代码 #include <iostream> using namespace std; int gcd(int x,int y) {int r;while(y!0){rx%y;xy;yr;}return x; } int main() {// 请在此输入您的代码int sum4039;//1/y和x/1都…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...
P10909 [蓝桥杯 2024 国 B] 立定跳远
# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时࿰…...
学习 Hooks【Plan - June - Week 2】
一、React API React 提供了丰富的核心 API,用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素,JSX 会被编译成该函数…...
