【MySQL基础】--- 约束

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【MySQL学习专栏】🎈
本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌
在这里插入图片描述

目录

  • 一、什么是约束
  • 二、样例演示
  • 三、外键约束的演示
    • 添加外键
    • 删除外键
  • 四、外键删除更新行为

一、什么是约束

概念:约束用来作用在表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确性、有效性、完整性。

以下是数据库中的六种约束:非空约束、唯一约束、主键约束、默认约束、检查约束、外键约束。

在这里插入图片描述

注意事项:

  • 多个约束之间应该用空格进行分割。
  • 主键约束:在插入数据时,主键约束不需要显式的指定,如果没有为主键列指定具体的值,MySQL 会自动生成一个唯一的主键值。这是因为主键约束要求每个记录都有一个唯一标识。

二、样例演示

在这里插入图片描述
我们根据上表的需求来进行表结构的创建演示。
创建语句:

create table user_1(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '名称',age int check ( age > 0 && age <= 120 ) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
)comment '用户表2';

运行结果:
在这里插入图片描述

三、外键约束的演示

什么是外键约束:外键约束是关系型数据库中的一种约束,用于确保数据完整性和一致性。它定义了一个表中的字段与另一个表中的字段之间的关系。外键约束的作用是保持数据的一致性,防止出现不符合业务逻辑的数据关联。

外键约束可以分为两个角色:主表和从表。主表中的字段称为主键,而从表中的字段称为外键。外键字段在从表中建立了与主表中主键的关联关系,它引用了主表中的某个字段,确保从表中的数据与主表中的数据始终保持一致

下面来演示以下外键约束,首先有两张表,一张表是主表(部门表),另外一张表就是从表(员工表)。请看下图:
在这里插入图片描述
在这里插入图片描述

如果我们没有为上述表创建外键约束的话,那么在数据库层面的话,上述表是没有任何联系的,此时就无法保持数据的一致性。

下面是主表和从表的创建和与数据的插入:

-- 父表的创建
create table dept(id int auto_increment primary key comment 'ID' ,name varchar(10) not null comment '部门名称'
) comment '部门表';-- 子表的创建
create table emp(id int auto_increment primary key,name varchar(10) not null comment '姓名',age int comment '年龄',job varchar(10) comment '工作',salary int comment '薪资',entrydate date comment '入职时间',managerid int comment 'BossID',dept_id int comment '部门ID'
) comment '员工表';-- 主表数据插入
insert into dept(id,name) values(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');-- 子表数据插入
insert into emp(id,name,age,job,salary,entrydate,managerid,dept_id) values(1,'Daming',18,'总经理',30000,'2010-9-12',null,5),(2,'Amy',19,'项目经理',15000,'2009-8-21',1,1),(3,'Simon',20,'后端开发',13000,'2008-8-7',2,1),(4,'David',21,'后端架构师',17000,'2007-7-9',2,1),(5,'Tom',23,'全栈',18000,'2004-8-6',3,1),(6,'Bob',18,'移动开发工程师',15000,'2001-7-30',2,1);

主表和从表演示:
在这里插入图片描述

在这里插入图片描述
员工表中的dept_id关联的是部门表的id

添加外键

有了主表和从表后,我们开始添加外键来使这两个表产生关联。

添加外键:

CREATE TABLE 表名(字段名 数据类型,...[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);

现在我们来执行下面添加外键的语句:alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);
执行完成之后,请看emp表的演示结果:
在这里插入图片描述

删除外键

删除外键语法:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

现在我们来删除刚刚emp表中添加的外键fk_emp_dept_id
执行命令:alter table emp drop foreign key fk_emp_dept_id

演示结果如下(可以看到刚刚的蓝色小钥匙消失不见了,说明我们成功删除了emp表中的外键)。
在这里插入图片描述

四、外键删除更新行为

下表是外键约束的删除和更新行为,请看:
在这里插入图片描述

格式:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

外键删除和更新行为的举例:

// cascade
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade;//set null
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete cascade;

好了,以上就是本文的全部内容,主要对MySQL中的约束进行了讲解。
就到这里吧,再见啦友友们!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 打印文本进度条

""" 打印文本进度条知识点&#xff1a;1、字符串运算&#xff0c;注意只能适用于加法、乘法&#xff0c;例如&#xff1a;123 123 123123例如&#xff1a;123 * 3 1231231232、循环语句while、for3、条件语句if4、重点&#xff1a;转义字符\r&#xff0c;可以…

【springMvc】自定义注解的使用方式

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》 ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 1.前言 1.1.什么是注解 Annontation是Java5开始引入的新特征&#xff0c;中文名称叫注解。 它提供了一种安全…

Unity中UI组件对Shader调色

文章目录 前言一、原理在Shader中直接暴露的Color属性&#xff0c;不会与UI的Image组件中的Color形成属性绑定。因为UI的Image组件中更改的颜色是顶点颜色&#xff0c;如果需要在修改组件中的颜色时&#xff0c;使Shader中的颜色也同时改变。那么就需要在应用程序阶段传入到顶点…

数据结构和算法(8):搜索树(二叉搜索树和AVL树)

查找 所谓的查找或搜索&#xff0c;指从一组数据对象中找出符合特定条件者&#xff0c;这是构建算法的一种基本而重要的操作。其中的数据对象&#xff0c;统一地表示和实现为 词条&#xff08;entry&#xff09; 的形式&#xff1b;不同词条之间&#xff0c;依照各自的 关键码…

Python:使用PySimpleGUI中sg.Input控件获取数据plot导致yticks错乱

sg.Input获取y轴数据代码 sg.Text(First Read:, font("Times New Roman", 9)),sg.Input(key-first_read-, size(25, 1), default_text0,0,0, justificationcenter, font("Times New Roman", 9), expand_xTrue), sg.Text(Second Read:, font("Times Ne…

Vue Grid Layout -️ 适用Vue.js的栅格布局系统,在vue3+上使用

文章目录 1、官网简介2、在vue3中使用1)、需要导入vue3支持的版本插件2)、在mian.js里引入&#xff1a;3)、在组件中使用 3、layout布局的计算逻辑4、 gridLayout 的属性 该栅格系统目前对 vue2 的支持是最好的&#xff0c;vue3 是需要用插件支持的&#xff0c;会在小节详细讲解…

求二维子数组的和(剖析)

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;本篇剖析一下二维子数组求和规则&#xff1a; &#x1f412;个人主页 &#x1f3c5;JavaSE系列专栏 &#x1f4d6;前言&#xff1a;本篇剖析一下二维子数组求和 规则&#xff1a; 这…

PyTorch C++ 前端:张量

本篇文章将尝试了解 PyTorch 组件的高级概述以及它们如何配合。 PyTorch 组件的高级概述 后端 PyTorch 后端是用 C++ 编写的,它提供 API 来访问高度优化的库,例如:用于高效矩阵运算的张量库、用于执行 GPU 运算的 CUDA 库以及用于梯度计算的自动微分等。 前端 可以使用…

蓝牙核心规范(V5.4)10.2-BLE 入门笔记之CIS篇

LE CIS 同步通信 同步通信提供了一种使用蓝牙LE在设备之间传输有时间限制的数据的方式。它提供了一个机制,允许多个接收器设备在不同的时间从相同的源接收数据,以同步它们对该数据的处理。LE AUDIO使用同步通信。 当使用同步通信时,数据具有有限的时间有效期,在到期时被认…

【强化学习】01—— 强化学习简介

文章目录 两种机器学习类型强化学习定义强化学习交互过程强化学习系统要素历史(History)状态(State)策略(Policy)奖励(Reward)价值函数(Value Function)模型(Model)迷宫例子 强化学习智能体分类参考 两种机器学习类型 监督学习/无监督学习/强化学习/机器学习之间的关系 预测 根…

坚鹏:浙江农商联合银行同业核心产品解读与差异化分析培训第7期

浙江农商联合银行同业核心产品解读与差异化分析培训第7期 1952年&#xff0c;浙江第一家农村信用社成立。2004年4月18日&#xff0c;浙江省农信联社成立&#xff0c;承担对全省农信社的管理、指导、协调和服务职能。2021年10月&#xff0c;经国务院批准同意、银保监会批复&…

虚拟DOM与diff算法

虚拟DOM与diff算法 snabbdom虚拟DOMdiff算法 snabbdom 是什么&#xff1a;snabbdom是著名的虚拟DOM库&#xff0c;是diff算法的鼻祖&#xff0c;Vue源码借鉴了snabbdom 虚拟DOM 是什么&#xff1a;本质上是存在内存里的 JavaScript 对象 作用&#xff1a;用来描述真实DOM的层…

Android毕业设计,基于Android 语音朗读书籍管理系统

视频演示&#xff1a; 基于Android 语音朗读书籍管理系统 基于 Android 的语音朗读书籍管理系统可以提供用户管理书籍、朗读书籍的功能。以下是一个简单的步骤和功能列表&#xff1a; 用户注册和登录功能&#xff1a; 用户可以注册新账号或使用现有账号登录系统。用户信息可以包…

php宝塔搭建实战Cloud网盘网站php源码

注意&#xff1a;因为微信最近又改了推送机制&#xff0c;经常有朋友说错过了之前的搭建教程文章&#xff0c;每次都要主动搜索才能搜到公众号。所以建议大家加个星标&#xff0c;就能第一时间收到推送。 大家好啊&#xff0c;欢迎来到web测评。本期给大家带来一套php开发的Clo…

Flutter flutter.minSdkVersion的实际文件位置

Flutter 项目的Android相关版本号配置&#xff1a; flutter.minSdkVersion 的版本号配置文件实际路径&#xff1a; …/flutter_sdk/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy Flutter版本号如下&#xff1a; bzbMacBook-Pro ccsmec % flutter --version …

不要动 WindowsApps 文件夹的权限以及更新 win10 版本

前言&#xff1a; 先简单说几句&#xff0c;本来打算开始写论文的&#xff0c;装个 mathtype 到 word 中&#xff0c;word 的安装路径在 WindowsApps 文件夹中&#xff0c;修改权限后导致 wsl 不能使用、微软自带的软件报错&#xff08;参数错误&#xff09;以及微软商店不能使…

C语言中的虚拟地址

虚拟地址 虚拟地址空间 对于操作系统而言&#xff0c;每个进程所得到的虚拟地址都在一个独立的固定的范围内&#xff0c;不会超过这个范围&#xff0c;我们把这个范围称为虚拟地址空间。所谓的虚拟地址空间本质就是一个地址范围&#xff0c;表示程序的寻址能力。对于32位系统…

直播视频处理过程

视频其实就是快速播放一连串连续的图片。 每一张图片&#xff0c;我们称为一帧。只要每秒钟帧的数据足够多&#xff0c;也即播放得足够快。比如每秒 30 帧&#xff0c;以人的眼睛的敏感程度&#xff0c;是看不出这是一张张独立的图片的&#xff0c;这就是我们常说的帧率&#…

如何用一行CSS实现10种现代布局

现代 CSS 布局使开发人员只需按几下键就可以编写十分有意义且强大的样式规则。上面的讨论和接下来的帖文研究了 10 种强大的 CSS 布局&#xff0c;它们实现了一些非凡的工作。 超级居中&#xff1a;place-items: center 对于第一个“单行”布局&#xff0c;让我们解决所有 CSS…

分析数组,结构体在反汇编中存储

本文会在IDA中分析数组&#xff0c;结构体在内存中的存储 目录 IDA分析数组存储 IDA分析结构体存储 传递参数的方式 IDA分析数组存储 测试代码如下&#xff1a; /************************************************************************/ /*Author : 玄都大…