当前位置: 首页 > news >正文

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 是如何工作的&#xff0c;以及为什么它会根据被编码的字符具有不同的长度。 一、JWT是什么&#xff1f; 在介绍JWT之前&#xff0c;我们先来回顾一下利用token进行用户身份验证的流程&#xff1a; 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:无穷级数

图源&#xff1a;文心一言 时间比较紧张&#xff0c;仅导图~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画导图~&#x1f9e9;&#x1f9e9; 参考资料&#xff1a;《高等数学 基础篇》武忠祥 &#x1f433;目录 &#x1f433;常数项级数 &#x1f40b;概要 &…...

Android工具栏ToolBar

主流APP除了底部有一排标签栏外&#xff0c;通常顶部还有一排导航栏。在Android5.0之前&#xff0c;这个顶部导航栏以ActionBar控件的形式出现&#xff0c;但AcionBar存在不灵活、难以扩展等毛病&#xff0c;所以Android5.0之后推出了ToolBar工具栏控件&#xff0c;意在取代Aci…...

2.3 - 网络协议 - ICMP协议工作原理,报文格式,抓包实战

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 ICMP协议 1、ICMP协议工作原理2、ICMP协议报文格式…...

北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑

近几年随着互联网快速发展&#xff0c;各行业领域都比较注重线上服务系统&#xff0c;通过陪诊小程序开发可以满足更多用户使用需求&#xff0c;同时还能提高用户使用体验。现在陪诊类的软件应用得到全面推广&#xff0c;在医疗行业当中陪诊小程序更贴近用户生活&#xff0c;可…...

前端面试题总结(一)

1. vue性能优化 v-if和v-show使用&#xff1a;频繁切换使用v-show&#xff08;display样式&#xff09;&#xff0c;反之使用v-if&#xff08;删除与新值DOM&#xff09;v-for必须加key&#xff0c;不能使用index当作key&#xff08;使用index&#xff0c;如果数组发生变化&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. 前后端搭建 二、项目流程简析步骤一&#xff1a;项目规划与…...

【Unity ShaderGraph】| 快速制作一个 表面水纹叠加效果

前言 【Unity ShaderGraph】| 快速制作一个 表面水纹叠加效果一、效果展示二、表面水纹叠加效果三、应用实例 前言 本文将使用ShaderGraph制作一个表面水纹叠加效果&#xff0c;可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章&#xff1a;【Unity Sh…...

大模型的实践应用5-百川大模型(Baichuan-13B)的模型搭建与模型代码详细介绍,以及快速使用方法

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用5-百川大模型(Baichuan-13B)的模型搭建与模型代码详细介绍,以及快速使用方法。 Baichuan-13B 是由百川智能继 Baichuan-7B 之后开发的包含 130 亿参数的开源可商用的大规模语言模型,在权威的中文和英文 benchmark 上均…...

用友U8定制版在集简云:无需API即可集成客服系统和用户运营

无代码开发的新时代 在这个信息化、自动化的时代&#xff0c;无代码开发已经成为一种新的趋势。集简云就是这样的一款工具&#xff0c;可以轻松连接用友U8 定制版与近千款软件系统&#xff0c;无需开发、无需代码知识就可以打通各种软件之间的数据连接&#xff0c;构建自动化与…...

APP埋点:页面统计与事件统计

我们平时所说的埋点&#xff0c;可以大致分为两部分&#xff0c;一部分是统计APP页面访问情况&#xff0c;即页面统计&#xff1b;另外一部分是统计APP内的操作行为&#xff0c;及自定义事件统计。 一、页面统计 页面统计&#xff0c;可以统计应用内各个页面的访问次数&#x…...

Kotlin学习笔记-Kotlin基础-01

变量声明 var&#xff1a;用于值不改变的变量&#xff0c;使用val声明的变量无法重新赋值 val&#xff1a;用于值可以改变的变量 变量声明格式 var/val data(变量名称) : Int(变量类型) Kotlin基本数据类&#xff1a; Int、Byte、Short、Long、Float、Double Kotlin类型推…...

gma 1.x 气候气象指数计算源代码(分享)

本模块的主要内建子模块如下&#xff1a; 如何获得完整代码&#xff1a; 回复博主 或者 留言/私信 。 注意&#xff1a;本代码完全开源&#xff0c;可随意修改使用。 但如果您的成果使用或参考了本段代码&#xff0c;给予一定的引用说明&#xff08;非强制&#xff09;&#xf…...

酒水展示预约小程序的效果如何

酒的需求度非常高&#xff0c;各种品牌、海量经销商组成了庞大市场&#xff0c;而在实际经营中&#xff0c;酒水品牌、经销商、门店经营者等环节往往也面临着品牌传播拓客引流难、产品展示预约订购难、营销难、销售渠道单一等痛点。 那么商家们应该怎样解决呢&#xff1f; 可以…...

蓝桥杯练习

即约分数 题目 思路 遍历所有的x&#xff0c;y&#xff0c;判断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【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 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 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上&#xff0c;比如&#xff1a;PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发&#xff0c;当设备上用的是modbus从站时&#xff0c;采集设备数据需要开发modbus主站&#xff1b;当设备上用的是西门子PN协议时&#xf…...

P10909 [蓝桥杯 2024 国 B] 立定跳远

# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时&#xff0…...

学习 Hooks【Plan - June - Week 2】

一、React API React 提供了丰富的核心 API&#xff0c;用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素&#xff0c;JSX 会被编译成该函数…...