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

【MySQL】第十七部分 约束

【MySQL】第十七部分 约束


文章目录

  • 【MySQL】第十七部分 约束
  • 17. 约束
    • 17.1 约束的分类
    • 17.2 非空约束
    • 17.3 唯一性约束
    • 17.4 主键约束
    • 17.5 自增列约束
    • 17.6 外键约束
    • 17.7 默认约束
    • 17.8 check约束
  • 总结


17. 约束

约束: 可以在创建表的时候规定约束,也可以在表创建之后添加,约束顾名思义就是限制条件

17.1 约束的分类

单列约束:每个约束只约束一列

多列约束:每个约束可约束多列数据

列级约束:只能作用在一个列上,跟在列的定义后面

表级约束:可以作用在多个列上,不与列一起,而是单独定义


17.2 非空约束

添加非空约束

# 1. 在创建表的时候添加非空约束
CREATE TABLE test1(id INT NOT NUll,name VARCHAR(10) NOT NULL,salary DECIMAL(10,2)
);# 2. 表创建后添加非空约束
ALTER TABLE test1
MODIFY salary DECIMAL(10,2) NOT NULL;

删除非空约束

ALTER TABLE test1
MODIFY salary DECIMAL(10,2);

17.3 唯一性约束

知识点:

  1. 同一个表可以有多个唯一约束
  2. 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一
  3. 唯一性约束允许列值为空
  4. 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同
  5. MySQL会给唯一约束的列上默认创建一个唯一索引
  6. 唯一约束可以使用表级约束的写法,上述的非空约束是不可以的

添加唯一约束

# 表级约束写法:
create table 表名称(字段名  数据类型,[constraint 约束名] UNIQUE(字段名,字段名)
);# 1. 在创建表的时候添加唯一约束
CREATE TABLE test2
(id INT UNIQUE, # (这种就是列级写法)name VARCHAR(10)
);# 2. 在创建表的时候使用表级约束写法
CREATE TABLE test3
(id INT,name VARCHAR(10),CONSTRAINT id_uni UNIQUE(id) 
);CREATE TABLE test4
(id INT,name VARCHAR(10),# 将id和name组合约束,表示只有当id和name都重复才会报错,否则都符合条件CONSTRAINT id_name_uni UNIQUE(id,name) # 多列约束
);# 3.在建表后添加唯一约束
ALTER TABLE test4 
ADD UNIQUE(name);# 4.在建表后添加唯一约束
ALTER TABLE test3
MODIFY name VARCHAR(10) UNIQUE;

删除唯一约束

上述说过因为添加唯一性约束的列上也会自动创建唯一索引,所以删除唯一约束只能通过删除唯一索引

# 通过该命令可以查看指定表中有哪些约束
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名'; # 也可以通过该命令查看表的索引
SHOW INDEX FROM 表名称;ALTER TABLE test3
DROP INDEX id_uni

17.4 主键约束

主键约束相当于唯一约束和非空约束的组合,主键约束列不允许重复,也不允许出现空值, 注意:

  1. 一个表当中最多只能由一个主键约束,建立主键约束可以在在列级创建,也可以在表级创建
  2. 主键约束可以对应一列或者多列(和上述唯一约束中说的多列约束一样)
  3. 主键约束不需要去取约束名,MySQL的主键名总是PRIMARY
  4. 创建主键约束时, 系统默认会在所在的列或列组合上建立对应的主键索引,如果删除主键约束了,主键约束对应的索引就自动删除了。

添加主键约束

# 1. 创建表时添加主键约束
CREATE TABLE test1
(id INT PRIMARY KEY ,name VARCHAR(10)
);# 2. 创建表时添加主键约束(表级写法)
CREATE TABLE test2
(id INT,name VARCHAR(10),PRIMARY KEY(id)
);CREATE TABLE test3
(id INT,name VARCHAR(10),PRIMARY KEY(id,name)
);# 3. 表创建后添加
ALTER TABLE test3
MODIFY id INT PRIMARY key;# 4. 表创建后添加
ALTER TABLE test4
ADD PRIMARY KEY(id);

删除主键约束

ALTER TABLE test5
DROP PRIMARY KEY;

17.5 自增列约束

使用的要求:

  1. 一个表中只能有一个自增列
  2. 自增列约束必须是主键列或者唯一键列
  3. 约束列的数据类型必须是整数类型
  4. 如果自增列指定了 0 和 null,会在当前最大值的基础上自增;如果自增列手动指定了具体值,直接赋值为具体值。

添加自增约束

# 1. 创建表时添加自增约束
CREATE TABLE test5 
(id INT PRIMARY KEY auto_increment,name VARCHAR(10)
);INSERT INTO test5(name)
VALUES('a'),('b');# 2. 建表后添加自增约束
ALTER TABLE test6
MODIFY id INT auto_increment;

删除自增约束

ALTER TABLE test6
MODIFY id INT;

17.6 外键约束

主表(父表):被引用的表,被参考的表

从表(子表):引用别人的表,参考别人的表

例如:员工表的员工所在部门这个字段的值要参考部门表:部门表是主表,员工表是从表。

注意点:

  1. 如果想要指定外键约束的话,需要先创建主表,在创建从表
  2. 从表的外键列,必须参考主表中的主键列或者唯一约束列
  3. 从表外键列对应主表的主键列或唯一约束列,二者数据类型必须要一致
  4. 删除表的时候先删除从表,再删除主表
  5. 一个表可以建立多个外键约束

添加外键约束

# 语法:
create table 从表名称(字段1  数据类型  primary key,字段2  数据类型,[CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的某个字段名) references 主表名 (被参考字段名)
);ALTER TABLE 从表名 ADD [CONSTRAINT 约束名] FOREIGN KEY (从表的某个字段名) REFERENCES 主表名(被引用字段名);# 1. 创建表时添加外键约束
CREATE TABLE dep
(d_id INT PRIMARY KEY,d_name VARCHAR(12)
);CREATE TABLE emp
(e_id INT PRIMARY KEY,e_name VARCHAR(10),department_id INT,FOREIGN KEY (department_id) REFERENCES dep(d_id)
);# 2. 建表后添加外键约束
ALTER TABLE emp
ADD FOREIGN KEY(department_id) REFERENCES dep(d_id) ;

删除外键约束

# 第一步先查看约束名和删除外键约束
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称';ALTER TABLE 从表名 DROP FOREIGN KEY 外键约束名;# 第二步查看索引名和删除索引
SHOW INDEX FROM 表名称; #查看某个表的索引名ALTER TABLE 从表名 DROP INDEX 索引名;

约束关系是针对双方的

  • 添加了外键约束后,主表的修改和删除数据受约束
  • 添加了外键约束后,从表的添加和修改数据受约束
  • 在从表上建立外键,要求主表必须存在
  • 删除主表时,要求从表从表先删除,或将从表中外键引用该主表的关系先删除

17.7 默认约束

给某个字段设置默认值,如果此字段没有显式赋值,则赋值为默认值。

添加默认约束

# 1. 创建表时添加默认约束
CREATE TABLE test1
(id INT PRIMARY KEY auto_increment,name VARCHAR(10),salary DECIMAL(10,2) NOT NULL DEFAULT 2000,gender CHAR DEFAULT '男'
);# 2. 建表后添加默认约束
# 如果这个字段原来有非空约束,还想保留非空约束,那么在加默认值约束时,还得保留非空约束,否则非空约束就被删除了,切记!!!!!!
ALTER table test2
MODIFY gender char(5) DEFAULT 'male' NOT NULL;

删除默认约束

ALTER table test2
MODIFY gender char(5) NOT NULL;

17.8 check约束

MySQL 5.7 不支持

check约束对数据进行校验,看是否满足预设的条件

CREATE TABLE test1
(id INT PRIMARY KEY,name VARCHAR(10),salary DECIMAL(10,2) CHECK(salary > 3000)
);

总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

相关文章:

【MySQL】第十七部分 约束

【MySQL】第十七部分 约束 文章目录【MySQL】第十七部分 约束17. 约束17.1 约束的分类17.2 非空约束17.3 唯一性约束17.4 主键约束17.5 自增列约束17.6 外键约束17.7 默认约束17.8 check约束总结17. 约束 约束: 可以在创建表的时候规定约束,也可以在表创建之后添加,约束顾名思…...

java ssm集装箱码头TOS系统调度模块的设计与实现

由于历史和经济体制的原因&#xff0c;国内码头物流企业依然保持大而全的经营模式。企业自己建码头、场地、经营集装箱运输车辆。不过近几年来随着经济改革的进一步深入和竞争的激烈&#xff0c;一些大型的码头物流企业逐步打破以前的经营模式&#xff0c;其中最明显的特征就是…...

MS14-064(OLE远程代码执行漏洞复现)

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;内网安全-漏洞复现 &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xf…...

【C++深陷】之shared_ptr

0. 什么是智能指针 使用new 和delete 手动进行动态内存管理很容易出现内存泄漏等问题。C11为了更安全、更方便的管理动态内存&#xff0c;新的标准库提供了两种智能指针&#xff08;smart pointer&#xff09;&#xff1a;shared_ptr和unique_ptr&#xff0c;以及一个伴随类we…...

SpringMVC中遇到的错误

SpringMVC中遇到的错误1.web.xml中配置SpringMVC核心类: DispatcherServlet 报错解决方案&#xff1a;添加Tomcat包2. not declaration can be found for element--------‘mvc:annotation-driven‘通配符的匹配很全面, 但无法找到元素 mvc:annotation-driven 的声明解决方案&a…...

姿态估计端到端新方案 | DirectMHP:用于全范围角度2D多人头部姿势估计

前言 现有的头部姿势估计主要集中在具有预先检测到的正面头部的单个人&#xff0c;这依赖于单独训练的面部检测器&#xff0c;不能很好地泛化到完整的视点。在本文中&#xff0c;作者关注全范围 MPHPE 问题&#xff0c;并提出了一个名为 DirectMHP 的直接端到端简单基线&#x…...

jvm学习的核心(五)---垃圾回收算法和常见垃圾回收器

文章目录1.垃圾回收算法**1.1. 标记阶段****1.2. 清除阶段**1.2.1.标记清除算法1.2.2.标记复制算法1.2.3.标记整理算法1.3.引用2.常见的垃圾回收器2.1.Serial回收器2.2.ParNew回收器2.3.Parallel回收器2.4.CMS回收器<font color red>2.5.G1垃圾回收器ZGC回收器&#xff…...

亿级高并发电商项目-- 实战篇 --万达商城项目 二(Zookeeper、Docker、Dubbo-Admin等搭建工作

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…...

【C#基础】 C# 数据类型总结

序号系列文章0【C#基础】初识编程语言C#1【C#基础】C# 程序通用结构总结2【C#基础】C# 程序基础语法解析文章目录前言数据类型一. 值类型&#xff08;Value types&#xff09;二. 引用类型&#xff08;Reference types&#xff09;三. 指针类型&#xff08;Pointer types&#…...

格子玻尔兹曼法介绍

1 LBM简介格子玻尔兹曼法&#xff08;Lattice Boltzmann Method&#xff09;简称LBM&#xff0c;是一种CFD算法&#xff0c;可求解流动、传热等常见CFD问题。LBM基于格子玻尔兹曼方程&#xff08;LBE&#xff09;&#xff0c;从介观尺度&#xff08;mesoscope&#xff09;描述了…...

活动星投票在时间的河流上造园分组怎么设置如何进行分组报名

“在时间的河流上造园”网络评选投票_免费小程序运行系统_企业有关的投票_微信投票的应用小程序投票活动如何做&#xff1f;很多企业在运营当中&#xff0c;都会通过投票活动来进行推广&#xff0c;从而达到吸粉、增加用户粘度等效果。而此类投票活动&#xff0c;通过小程序就可…...

c#小笔记本-基础

c#基本知识一.基础操作1.打印-writeline,write2.输入-readline,readkey二.变量1.折叠代码-#region&#xff0c;#endregion2.变量类型&#xff08;在c语言变量类型上新增的&#xff09;三.常量-const四.转义字符五.显示转换1.括号强转-低精度装高精度2.parse法-作用于字符串3.co…...

DamiCMS SQL注入分析

2023年将会持续于B站、CSDN等各大平台更新&#xff0c;可加入粉丝群与博主交流:838681355&#xff0c;为了老板大G共同努力。 一、入口文件(单入口文件模式) 看一下Index.php文件代码&#xff1a;引入了php_safe.php文件 查看一下php_safe.php防御文件&#xff1a; 对变量e…...

图傅里叶变换的推导和理解

把传统的傅里叶变换以及卷积迁移到Graph上来,核心工作其实就是把拉普拉斯算子的特征函数 e − i ω t e^{-i\omega t} e−iω...

Java八股文(Java面试题)

JDK、JRE、JVM 三者之间的关系&#xff1f;JDK&#xff08;Java Development Kit&#xff09;&#xff1a;是Java开发工具包&#xff0c;是整个Java的核心&#xff0c;包括了Java运行环境JRE、Java工具和Java基础类库。它能够创建和编译程序。JRE&#xff08;Java Runtime Envi…...

java ssm idea高校图书借阅管理系统设计2z87z

本论文是以构建高校图书管理系统设计为目标&#xff0c;使用 jsp制作&#xff0c;由前台用户图书借阅、后台管理员图书分类两大部分组成。着重论述了系统设计分析&#xff0c;系统的实现&#xff08;用户注册模块&#xff0c;用户登录&#xff0c;用户图书借阅模块&#xff0c;…...

电脑重装系统注册表恢复方法

​今天讲关于大家的电脑在遇到一些故障的时候&#xff0c;以及电脑用久了之后会卡顿&#xff0c;那么这时候大家一般都会给电脑重装系统。重装系统之后却发现自己电脑里的注册表不见了&#xff0c;重装系统后怎么恢复注册表?小编就带着大家一起学习重装系统注册表恢复到底是怎…...

信道建模(大尺度、小尺度、莱斯衰落、瑞利衰落、莱斯信道、瑞利信道)

一、大尺度衰落与小尺度衰落 大尺度衰落由收发两端的距离决定&#xff0c;功率上建模为&#xff1a; 小尺度衰落由收发两端的环境决定&#xff0c;比如是否有遮挡&#xff0c;场景有室内、室外、平原、山村、城镇等&#xff0c;这些环境影响到收发两端是否有直达链路&#xff0…...

2022年12月电子学会Python等级考试试卷(四级)答案解析

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;四级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1. 有n个按名称排序的商品&#xff0c;使用对分查找法搜索任何一商品&#xff0c; 最多查找次数为5次&#xff0c;则n的值可能为&#xff1f;&…...

通过实例告诉你lua中ipairs到底是怎么遍历的!

这个的文章挺多的&#xff0c;但是有好几种说法并且不全。有人说是忽略手动设定值&#xff0c;有人说是从1开始数&#xff0c;直到序号断开&#xff0c;还有人给出结果&#xff0c;但是和我实机测试的效果不一样&#xff0c; 所以我自己总结一篇。经过我的测试和总结得到以下结…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...