MySQL数据库 12:约束

news2024/11/23 21:49:59

约束:

在MySQL中,约束是一种限制数据表中列值的规定。保证数据库中的数据正确,有效性和完整性。MySQL中的约束有以下几种:

1. 主键约束(Primary Key Constraint):主键是用于唯一标识表中每行记录的列。主键约束要求每个主键列的值都是唯一的,且不能为NULL。一个表只能有一个主键。

2. 唯一约束(Unique Constraint)唯一约束要求列中的值各不相同,且可以为空(NULL)。一个表可以有多个唯一约束。

3. 非空约束(Not Null Constraint):非空约束要求列中的值不能为NULL

4. 外键约束(Foreign Key Constraint):外键是用于关联两个表的列。外键约束要求参照表中必须存在与被参照表中主键列相符的值。MySQL中的外键约束需要引用参照表中的主键列,从而保证参照表中的值是唯一的。

5.默认约束(Default constraint):保存数据的时候,如果未指定该字段的值,就采用默认值。

6.检查约束(Check constraints):保证字段值满足某一个条件

这些约束可用于对表中数据进行更全面、更安全的控制。例如,主键可以确保每个表行的唯一标识,唯一约束可以保证表中没有重复数据,非空约束可以避免NULL值,外键约束可以确保数据表之间的数据完整性。


 

约束时作用在字段上的,它可以限制字段的数据。在创建表或修改表的时候添加约束,一个字段我们可以添加多个约束。


案例:创建以下表:

 代码:

create table user (
    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'用户表';

 运行结果:

 我们通过插入数据来一个个验证约束的功能

1.id的主键约束:

insert into user(name, age, status,gender) values('tom',19,'1','男'),('koy',14,'1','女');

结果:

 我们发现即使不给id插值,他也会按照我们设定好的递增进行,也就是永远不会出现id重复的情况,而不会重复的id就作为每条数据的唯一标识。

在这里需要注意错误的数据虽然会因为约束而不能存储到表中,但是他也会有自己的主键,只是我们无法在这张表中调用,因此如果我们如果表中已经有两条数据,我们再输入不符合约束的两条数据,第五次输入一条符合约束的数据,那么此时这条符合约束的数据的id应该是5,而不是3,因为前面那两条没有输入成功的数据也为自己获取了一个唯一的主键,我们可以看下面status的默认约束来验证这条结论。

2.name的非空约束:

insert into user(name, age, status,gender) value(null,17,'1','男');

结果:

由于非空约束这里会直接报错,但是要注意的是空字符不是空,这里的非空约束是指值不能为NULL;
 

 name的唯一约束:

insert into user(name, age, status,gender) value('koy',10,'1','女');

结果:前面已经有koy这个名字了,受到唯一约束的影响,此时如果我们名字重复,会直接报错。

 3.age的检查约束:

insert into user(name, age, status,gender) value('kot',130,'1','女');

结果:我们在前面定义的时候,约定了age的年龄范围在1-119之间,因此输入age=130会报错

 4.status的默认约束:

默认约束采取有输入采取输入值,没输入采取默认值的做法。 

insert into user(name, age,gender) value('kob',15,'女');

结果:
 

 5.外键约束:

添加外键:


在这里我们预先建立一张表:

 而他和我们之前那张表的关系为:

 这两张表之间的关系为我们的status需要通过第二张表来补全。我们把具有外键status的表称为是子表,具有外键指向的主键的表我们称为是父表。但是目前来讲,这两张表只在逻辑上有关系,但是在数据库层面并没有建立起任何关系,如果我们删除dept表中的1,user中status列中的1仍然存在,这个时候就需要给user中的status加上外键约束

创建外键的语法:

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

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表 (主表列名);

案例:我t们为user中的status添加外键约束,使其与dept表相连。

alter table user add constraint fk_user_dept_id foreign key (status) references dept(id) ;

执行成功以后我们会发现status上方多出来一个蓝色的钥匙 ,就说明它已经是一个外键了

 此时我们尝试在dept中删除id为1.

 就会报错,因为此时user表中还有关于这个id的信息,因此我们的父表不可以对这个数据进行删除,我们也就在两个表之间建立了关联。

外键的删除:

ALTER TABLE 表名 DROP FORGEIGN KEY 外键名称

外键约束:

 语法:

alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE ;

结束!
 

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

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

相关文章

浅谈Servlet、HTTP

一、Servlet Servlet 是Java Web 开发的规范。任何一个mvc的框架都是servlet发展来的。SpringMVC使用DispatcherServlet拦截所有API请求&#xff0c;自定义注解进行URL匹配。 Servlet层次结构 Setvlet生命周期 1、工作流程 1.Web Client 向Servlet容器&#xff08;Tomcat&…

Java 实现更新顺序表中的指定元素

一、思路 1.定义一个 pos 变量为要更新的位置&#xff0c;定义一个 value 变量为更新后的数值. 2.顺序表不能是空的&#xff0c;就肯定不可以更新元素. 3.pos位置要合法&#xff0c;要保证 pos 位置是处在顺序表范围内的. 4.更新功能不需要考虑扩容&#xff0c;因为不涉及到元素…

传统制作 VS AI制作,如何一键制作PPT ?

教你如何快速的生成一个可用的 PPT&#xff0c;以及现在比较主流的 ChatGPT PPT 衍生工具推荐。 一、原理 结合AI生成 PPT 的原理其实非常简单&#xff0c; 现有的一些 PPT 软件或者开源工具会提供一种文本格式&#xff0c;我们只需要给出定固定的格式&#xff0c;把内容输入…

分享几个实用的C站AI模型平替网站

分享几个实用的C站AI模型平替网站 部分用户可能没有mofa工具访问Civitai ( C站)下载AI模型&#xff0c;所以给大家分享几款国内版AI模型素材库&#xff0c;无障碍访问下载Stable diffusion模型。 1、LiblibAI 访问速度快&#xff0c;作品墙、有提示词参考&#xff0c;无需登录…

SciencePub学术 | 智能交通类重点SCIEI征稿中

SciencePub学术刊源推荐: 智能交通类SCI&EI征稿中&#xff01;进展顺利&#xff0c;录用率高&#xff0c;连续十年IF稳定上升。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 【期刊简介】IF&#xff1a;4.0-4.5↑&#xff0c; JCR 2区&#xff0c;…

剪映自动打关键帧

牙叔教程 简单易懂 这是给单张图片打关键帧的教程, 给图片打关键帧有四个步骤 鼠标点选图片打起始帧跳转到图片末尾打结束帧 打帧是一件很费手的事情, 所以我写了个自动化的代码, 专门用来打关键帧, 使用的软件是 AutoHotkey 关键帧参数的详细解释 剪映 自动打关键帧 AutoH…

chatgpt赋能python:Python中如何精确表示小数

Python中如何精确表示小数 在日常的数学计算过程中&#xff0c;小数是不可避免的。然而&#xff0c;由于计算机在存储和处理小数时的固有限制&#xff0c;会导致精度上的问题。Python作为一种通用的编程语言&#xff0c;也具有这样的限制。但是&#xff0c;在Python中&#xf…

基于层次的聚类算法

尽管基于划分的聚类算法能够实现把数据集划分成指定数量的簇&#xff0c;但是在某些情况下&#xff0c;需要把数据集划分成不同层上的簇&#xff1a;比如&#xff0c;作为一家公司的人力资源部经理&#xff0c;你可以把所有的雇员组织成较大的簇&#xff0c;如主管、经理和职员…

三维重建 医学图像的可视化 PyQt Python VTK 四视图(横断面,冠状面,矢状面,3D)

本文实现了 Python C 版本 的 四视图&#xff0c;横断面&#xff0c;冠状面&#xff0c;矢状面&#xff0c;3D 主要功能&#xff1a; 1:可以通过进度条换层 2:鼠标双击放大/缩小窗口 3:按住鼠标中键拖动图像 4:鼠标右键滑动放大/缩小图像 效果&#xff1a; 视频&#…

数据库期末复习(7.1) 查询执行

目标 了解各种查询执行的方法和记住各种查询执行的IO代价,了解支持算法最少的空间(页数多少)。 一趟归并排序的代价和改进方案笔记 数据库 查询执行(1) 多路归并_旅僧的博客-CSDN博客 创建归并段过程的IO代价是2B(R) 并且会在页面中新开辟一段run为了存放已经排好序的归并…

c语言的一些小题目(初阶),持续分享......

文章目录 1.打印杨辉三角形 2.打印X形图案 3.打印菱形 4.字符串左旋 5.倒置字符串 文章内容 1.杨辉三角形是一道非常经典的题目&#xff0c;观察下面的图片中红色与蓝色方块的关系我们不难发现&#xff0c;两个红色方框里的数字相加等于蓝色方框里的数字&#xff0c;找到…

十、RGBA数据转NV21格式存储

1、介绍 首先为什么要去了解RGBA转NV21格式的&#xff0c;因为在软编码X264的时候就需要yuv格式作为输入源进行编码。 NV21格式的回顾&#xff1a;也是YUV420SP格式&#xff0c;存储两个plane&#xff0c;Y&#xff0c;VU交叉存储&#xff0c;内存大小为w * h w * h/ 4 * 2w…

力扣高频SQL50题(基础版)——第七天

力扣高频SQL50题(基础版)——第七天 1 查询结果的质量与占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT q.query_name,ROUND(AVG(q.rating/q.position),2) quality, ROUND(100*(SELECT count(*) FROM Queries WHERE rating<3 AND que…

国产品牌:中国牙科市场的美好未来

牙菌斑是口腔疾病主要元凶&#xff0c;我国口腔患者人数逐年增加。根据国家卫健委的资料&#xff0c;常见的口腔疾病主要是由附着在牙齿上的牙菌斑引起&#xff0c;因此&#xff0c;口腔护理主要达到清除牙菌斑、保护牙齿及牙周健康的目的。根据天猫发布的《2021 天猫口腔护理消…

【SpinalHDL快速入门】4.4、基本类型之Enum

文章目录 1.1、描述1.2、声明1.2.1、编码1.2.2、示例 1.3、运算符1.3.1、比较&#xff08;Comparison&#xff09;1.3.2、类型&#xff08;Types&#xff09;1.3.3、类型转换 1.1、描述 枚举类型对应于命名值列表。 1.2、声明 枚举数据类型的声明如下&#xff1a; object E…

vscode搭建Python环境

文章目录 安装Python解释器vscode 所需插件PythonCode Runner vscode调试Python官网的中文文档 安装Python解释器 打开Python官网 https://www.python.org/ 在 Downloads 下面选择自己的对应系统&#xff0c;本文以 Windows 为例 可以选择最新版本 下载可执行文件类型的安…

【Linux服务器编程总结】网络编程基础知识 (udp初级)

一.预备知识 1.主机字节序和网络字节序: 其实本质就是大小端。通常在网络传输的时候会将要发送的数据转同一转换成大端后再发送。在linux中提供了如下四个函数进行大小端转换。 2. 网络套接字&#xff1a; 我们在网络编程的时候会使用到socktet 套接字。对此我们需要了解so…

SQL语句之DQL语言(一)

说明&#xff1a;DQL&#xff08;Data Query Language&#xff0c;数据查询语言&#xff09;&#xff0c;用来查询数据库表中的记录。有的书中&#xff0c;会把DQL语言放入到DML&#xff08;Data Manipulation Language&#xff0c;数据操作语言&#xff1a;数据的增删改&#…

初识TypeScript -基础一

前言 在开始工作之前&#xff0c;就听朋友提过TypeScript&#xff0c;之前也没多想学习&#xff0c;直到vue3出来之后&#xff0c;感觉TypeScript 后面会成为主流&#xff0c;只能硬着头皮学学吧。 读完本片文章&#xff0c;你会收获 1、TypeScript的历史及其优势 2、TypeScri…

Day_39关键路径

目录 一. 关于关键路径 1. 有向无环图 2. AOV网 3. 拓补排序 4. 关键路径 二. 如何实现寻找关键路径 三. 关键路径的代码实现 1. 正向计算 1.1 计算每个节点的入度 1.2 拓扑排序&#xff08;计算每个节点最早开始的时间&#xff09; 2. 反向计算 2.1 计算每个节点的出度&…