【MySQL基础】--- 约束

news2024/11/27 16:46:18

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【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.coloradmin.cn/o/1028754.html

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

相关文章

近距离看GPU计算-2

文章目录 前言1.SIMT和硬件多线程3.GPU的Memory Hierarchy 前言 本文转自公众号 GPU and Computing 在《近距离看GPU计算》系列第一篇里我们介绍了GPU的一些基础知识及其如何从图形加速设备演化到通用计算平台。本文我们会具体从处理单元设计和存储层次结构两个方面探讨GPU不…

多元化工具汇聚:企业如何提升协同效率?

在现代企业中&#xff0c;协同工作是不可或缺的。然而&#xff0c;随着企业规模的扩大&#xff0c;协同工作的难度也随之增加。针对这些挑战&#xff0c;我们推荐一款多元化工具—J2L3x。在这篇文章中&#xff0c;我们将介绍J2L3x的主要功能和如何利用它来提高企业的协同效率。…

UG\NX二次开发 一个分割曲线的工具

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: 今天有群友发了一个工具演示,是一个分割曲线的工具: 我当时想这位好兄弟怎么这么牛逼,原来啊,他跟你们一样喜欢看我的博客。他用我分享的分割曲线的…

go学习-GMP模型

GMP 好理解还是 GPM 好理解&#xff1f; 按照上述图&#xff0c;从上往下&#xff0c;GPM更适合理解 GMP 模型&#xff1a; Go 语言运行时系统中的 Goroutine、用于管理 Goroutine 调度的 Go Scheduler&#xff08;P&#xff09;、机器可用的逻辑处理器数量&#xff08;M&#…

【数据结构复习之路】线性表(严蔚敏版)万字详解主打基础

专栏&#xff1a;数据结构复习之路 数据结构的三要数&#xff1a;逻辑结构、数据的运算、存储结构&#xff08;物理结构&#xff09;。 我接下来要介绍的线性表&#xff0c;顾名思义也将从这三个大方向进行阐述&#xff1a; 一、线性表的定义——逻辑结构 线性表是具有相同…

Flutter绘制拖尾效果

演示&#xff1a; 代码&#xff1a; import dart:ui;import package:flutter/material.dart; import package:kq_flutter_widgets/widgets/chart/ex/extension.dart;class TrailingView extends StatelessWidget {const TrailingView({super.key});overrideWidget build(Build…

成绩发布系统攻略

作为一名教师&#xff0c;管理学生成绩是我们工作中的重要任务之一。传统的手工成绩记录和发布方式已经无法满足现代教育的需求。因此&#xff0c;制作一个高效、安全、便捷的学生成绩发布系统是至关重要的。本文将为您介绍如何制作学生成绩发布系统&#xff0c;以提高教学效率…

MyBatis-Plus的常用注解

一、TableName 在使用MyBatis-Plus实现基本的CRUD时&#xff0c;我们并没有指定要操作的表&#xff0c;只是在Mapper接口继承BaseMapper时&#xff0c;设置了泛型User&#xff0c;而操作的表为user表&#xff0c;由此得出结论&#xff0c;MyBatis-Plus在确定操作的表时&#xf…

Flutter实现PS钢笔工具,实现高精度抠图的效果。

演示&#xff1a; 代码&#xff1a; import dart:ui;import package:flutter/material.dart hide Image; import package:flutter/services.dart; import package:flutter_screenutil/flutter_screenutil.dart; import package:kq_flutter_widgets/widgets/animate/stack.dart…

react如何根据变量渲染组件

三元运算符useMemo 第一种方法的缺点&#xff1a;其他变量更改时&#xff0c;会再次进入三元运算符,例子如下&#xff1a; //这里有一个父组件:Father { n0 ? <Father><div>{111}</div></Father> : <div>{111}</div> }第二种方法如图 …

apk获取MD5方式记录

1&#xff0c;低版本android studio 我这里是Android studio Arctic Fox 直接使用keytool -printcert -jarfile xxx.apk获取 获取得到的效果&#xff1a; 2&#xff0c;高版本android studio 在高版本下&#xff0c;按照如下图点击打开到gradle。在③步骤下直接输入signning…

《向量数据库指南》——火山引擎向量数据库对正式外开放服务

向量数据库技术全景 经过长期的内部探索和优化,抖音采用的向量数据库产品结构如下图所示:基于云基础设施,提供经过深度打磨和优化的各个引擎,提供从多模态数据写入,到向量生成,再到在线检索,以及上线后的弹性调度和监控的一整套全链路解决方案。 火山引擎向量数据库的场…

C++ 里 ++i 是原子操作吗?

1.什么是原子操作 在多线程环境下,原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。 原子操作可以确保某些特定操作在多线程条件下,不会由于线程切换而导致数据污染。比如,对一个变量的读/写…

ASEMI快恢复二极管S1FD40A180H参数,S1FD40A180H应用

编辑-Z S1FD40A180H参数描述&#xff1a; 型号&#xff1a;S1FD40A180H 最大直流反向电压VR&#xff1a;1800V 最大工作峰值反向电压VRWM&#xff1a;1440V 最大平均正向电流IF&#xff1a;40A 非重复正向浪涌电流IFSM&#xff1a;500A 操作和储存温度范围TJ ,TSTG&…

洞察2023:中国心室辅助装置行业竞争格局及市场份额

本文核心数据&#xff1a;代表性企业排名 ; 代表性企业优势分析等 1、中国心室辅助装置行业竞争梯队 人工心脏 ( Artificial Heart, AH ) 是机械辅助类器械的代表&#xff0c;用于替代或辅助心脏泵血功能。按照功能可分为心室辅助装置 ( Ventricular Assist Device&#xff0…

Python与数据分析--每天绘制Matplotlib库实例图片3张-第1天

目录 1.实例1--Bar color demo 2.实例2--Bar Label Demo 3.实例3--Grouped bar chart with labels 1.实例1--Bar color demo import matplotlib.pyplot as plt # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus…

Node.js环境安装与服务设置,结合内网穿透随时随地公网访问!

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

spring boot +vue 博客系统,开源的资源网站

spring boot vue 博客系统&#xff0c;开源的资源网站&#xff08;Aurora前后端分离博客) 体验地址&#xff1a;http://blog.tlzcf.vip/ 相关技术 前端&#xff1a; 样式来自于&#xff1a;hexo的aurora主题基础框架&#xff1a;vue3(前台) vue2(后台)状态管理&#xff1a;…

蓝桥杯每日一题2023.9.21

蓝桥杯2021年第十二届省赛真题-异或数列 - C语言网 (dotcpp.com) 题目描述 Alice 和 Bob 正在玩一个异或数列的游戏。初始时&#xff0c;Alice 和 Bob 分别有一个整数 a 和 b&#xff0c;有一个给定的长度为 n 的公共数列 X1, X2, , Xn。 Alice 和 Bob 轮流操作&#xff0…

安科瑞为工业能效提升行动计划提供EMS解决方案-安科瑞黄安南

摘要: 2022年6月29日工信部、发改委、财政部、生态环境部、国资委、市场监管总局六部门联合下发《关于印发工业能效提升行动计划的通知》&#xff08;工信部联节〔2022〕76号&#xff0c;以下简称《行动计划》&#xff09;&#xff0c;主要目的是为了提高工业领域能源利用效率&…