MySQL基础_10.约束

文章目录

  • 第一章、约束
    • 1.1 约束的定义
    • 1.2 非空约束
    • 1.3 唯一性约束
    • 1.4 主键约束
    • 1.5 自增列
    • 1.6 外键约束
    • 1.7 CHECK约束
    • 1.8 DEFAULT约束

第一章、约束

1.1 约束的定义

约束是对表中字段的限制。

约束按照作用范围可以分为:列级约束和表级约束
列级约束:声明在对应字段的后面
表级约束:在表中所有字段都声明完,在所有字段的后面声明

1.2 非空约束

1.作用
限定某个字段/列的值不为空

2.关键字

NOT NULL

3.特点

  • 所有类型的值都可以为NULL,包括INTFLOAT等数据类型
  • 非空约束只能出现在表对象的列上,只能某个列单独限制为非空,不能组合非空
  • ‘’空字符串不等同于NULL,0也不是NULL

1.3 唯一性约束

1.作用
限制某个字段/列的值不能重复,允许出现多个空值:NULL

2.关键字

UNIQUE

3.特点

  • 同一个表可以有多个唯一约束
  • 唯一约束可以是某个列的值唯一,也可以是多个列组合的值唯一
  • 唯一性约束允许列值为空
  • 在创建唯一约束的时候,如果没有给唯一约束命名,则默认和列名相同
  • MySQL会给唯一约束的列上默认创建一个唯一索引

4.举例

CREATE TABLE user(id INT,user_name VARCHAR(15),user_password VARCHAR(25),// 表级约束,复合的唯一索引CONSTRAINT uk_user_name_password UNIQUE(user_name,user_password)

1.4 主键约束

1.作用
用来唯一标识表中的一行记录

2.关键字

PRIMARY KEY

3.特点

  • 主键约束相当于唯一约束和非空约束的组合,主键约束列不允许重复,也不允许出现空值
  • 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可在表级别上创建
  • 主键约束对应着表中的一列或多列(复合主键)
  • 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复
  • 当创建主键约束时,系统默认会在所在列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。如果删除主键约束了,主键约束对应的索引就自动删除了。
  • 需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。

1.5 自增列

1.作用
某个字段的值自增

2.关键字

AUTO_INCREMENT

3.特点和要求

  • 一个表最多只能有一个自增列
  • 当需要产生唯一标志或顺序值时,可设置自增长
  • 自增长列约束的列必须是键列(主键或唯一键列)
  • 自增约束的列的数据类型必须是整数类型

4.新特性

CREATE TABLE test(id INT PRIMARY KEY AUTO_INCREMENT
);INSERT INTO test(id)
VALUES(0),(0);SELECT * FROM test;DELETE FROM test WHERE id = 2;INSERT INTO test(id)
VALUES(0);

在这里插入图片描述

此时再将id=3的记录删除,重启服务器,在MySQL5.7版本中再新增数据,id将从2开始,而MySQL8.0版本将从4开始。

  • 在MySQL5.7系统中,对于自增主键的分配规则,是由InnoDB数据字典内部一个计数器来决定的,而该计数器只在内存中维护,并不会持久化到磁盘中。当数据库重启时,该计数器会被初始化。
  • MySQL8.0将自增主键的计数器持久化到重做日志中。每次计数器发生变化,都会将其写入到重做日志中,如果数据库重启,InnoDB会根据日志中的信息来初始化计数器的内存值。

1.6 外键约束

1.作用
限定某个表的某个字段的引用完整性。
比如:员工表的员工所在部门的选择,必须在部门表能找到对应部分。
在这里插入图片描述

2.关键字

FOREIGN KEY

3 .主表和从表/父表和子表
主表(父表)︰被引用的表,被参考的表
从表(子表)︰引用别人的表,参考别人的表

4.特点

  • 从表的外键列,必须引用/参考主表的主键列或唯一约束列,因为被依赖/参考的值必须是唯一的
  • 在从表中指定外键约束,并且一个表可以建立多个外键约束
  • 从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义必须一致
  • 当创建外键约束时,系统默认会在所在列上建立对应的普通索引(根据外键查询效率很高)

5.使用示例

create table 主表名称(字段1 数据类型 primary key,字段2 数据类型 
);create table 从表名称(字段1 数据类型 primary key,字段2 数据类型,CONSTRAINT 外键约束名 FOREIGN KEY(从表的某个字段) references 主表名(被参考字段) 
);

6.注意事项

在MysQL里,外键约束是有成本的,需要消耗系统资源。对强大并发的SQL操作,有可能会不适合。比如大型网站的中央数据库,可能会因为外键约束的系统开销而变得非常慢。所以,MySQL允许你不使用系统自带的外键约束,在应用层面完成检查数据一致性的逻辑。也就是说,即使你不用外键约束,也要想办法通过应用层面的附加逻辑,来实现外键约束的功能,确保数据的一致性。

7.阿里开发规范

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

说明:(概念解释)学生表中的student_id是主键,那么成绩表中的student_id则为外键。如果更新学生表中的studrnt_id,同时触发成绩表中的student_id更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群﹔级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

1.7 CHECK约束

1.作用
检查某个字段的值是否符合xx要求,一般指的是值的范围(比如salary > 2000 )。
2.关键字

CHECK

3.说明
MySQL5.7 可以使用check约束,但是check约束对数据验证没有任何作用。添加数据时,没有任何错误或警告,但是MySQL8.0 可以使用check约束。

1.8 DEFAULT约束

1.作用
给某个字段/列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。

2.关键字

DEFAULT

3.说明
为什么建表时,加not null default''default 0?
答:不想让表中出现null值。

  • 不好比较,null是一种特殊值,比较时只能用专门的is null和is not null来比较。碰到运算符,通常返回null;
  • 效率不高。影响提高索引效果;

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

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

相关文章

【二进制部署k8s-1.29.4】十二、ingress-nginx的安装部署

文章目录 简介 一.ingress的安装一.验证安装 简介 本章节主要讲解安装ingress-nginx-v1.10.1的安装,ingress的安装比较简单,只需要下载yaml文件,修改一下镜像地址,原本的镜像地址由于墙的原因,没法直接下载&#xff0c…

C++网络编程——多路IO复用 重点epoll

前言补充 阻塞与非阻塞 同步阻塞IO (Blocking IO) : 传统IO模型 同步非阻塞IO (Non-blocking IO): 默认创建的socket都是阻塞的,若是要设置成非阻塞IO需要socket被设置成NONBLOCK。 IO多路复用(IO Multiplexing&…

微软 Windows 10 22H2 发布可选更新 19045.4474,修复窗口显示问题等

微软今天面向 Windows 10 22H2 版本,发布了 KB5037849 非安全可选更新,用户安装后版本号升至 Build 19045.4474。 IT之家 5 月 30 日消息,微软今天面向 Windows 10 22H2 版本,发布了 KB5037849 非安全可选更新,用户安…

内部资料13000+变现资源,写作副业项目,找灵感就用它!

很多刚学在公众号,或是在其他自媒体平台写副业项目的朋友,写一段时间后会发现找不到写的内容。于是,每天都会为写什么而苦恼,找不到素材,没有灵感。 关注富哥资源站的朋友都知道,咱们的资源站已经更新了内…

2024 Jiangsu Collegiate Programming Contest E. Divide 题解 主席树

Divide 题目描述 Given an integer sequence a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1​,a2​,…,an​ of length n n n. For an interval a l , … , a r a_l,\ldots,a_r al​,…,ar​ in this sequence, a Reduce operation divides the maximum value of the inter…

【NI国产替代】产线测试:数字万用表(DMM),功率分析仪,支持定制

数字万用表(DMM) • 6 位数字表显示 • 24 位分辨率 • 5S/s-250KS/s 采样率 • 电源和数字 I/O 均采用隔离抗噪技术 • 电压、电流、电阻、电感、电容的高精度测量 • 二极管/三极管测试 功率分析仪 0.8V-14V 的可调输出电压,最大连…

[Cloud Networking] Layer Protocol (continue)

文章目录 1. STP / RSTP / MSTP Protocol1.1 STP的作用1.2 STP 生成树算法的三个步骤1.3 STP缺点 2. ARP Protocol3. DHCP Protocol3.1 DHCP 三种分配方式3.2 DHCP 攻击 4. IPSEC / MACSEC 1. STP / RSTP / MSTP Protocol 1.1 STP的作用 消除二层环路:通过阻断冗余…

shell脚本基础教程

快捷目录 1、解释器2、shell脚本调用方式3、变量自定义变量环境变量特殊变量变量的默认值declare 命令readonly命令let命令 4、数据类型字符串 5、字符串操作6、数组定义数组读取数组修改数组删除数组获取数组长度 7、运算符算术运算符关系运算符布尔运算符逻辑运算符 要在[[ ]…

求极差(range)

题目描述 小红拿到了一个数组,其中每个元素都是素数。小红准备进行若干次以下操作: 选择两个素数元素,将他们合并,生成的新元素为原来两个素数的乘积。 现在小红希望操作到不能再操作为止,然后使得最终的极差&#…

王道408数据结构CH4_串

概述 4 串 4.1 串的实现 4.1.1 存储结构 定长顺序存储 #define Maxsize 255typedef struct{char *ch[Maxsize];int length; }SString;堆分配存储 typedef struct{char *ch;int length; }HString;块链存储 4.1.2 基本操作 4.2 模式匹配(子串定位) 4.2.…

Docker面试整理-Docker Swarm是什么?

Docker Swarm 是 Docker 的原生集群管理和编排工具,用于将多个 Docker 主机集合成一个虚拟的 Docker 主机。它允许你在多台机器上部署、管理和扩展容器化应用,是构建和管理容器化应用的高可用集群的一种方式。 Docker Swarm 的核心特性包括: 1. 集群管理: ● Docker Swarm…

RaspAP:轻松实现树莓派无线 AP

RaspAP 是一个可以将树莓派轻松部署成无线 AP(Access Point)的软件方案,具有一套响应式的 WebUI 来控制 WiFi,用起来和家用路由器一样方便。RaspAP 可以运行在 Raspbian 上,只需要先给树莓派安装好 Raspbian 系统&…

12寸晶圆厂建设概述

1、关键步骤 半导体12英寸(12吋)晶圆厂的建厂过程是一个复杂且耗时的工程,涉及到多个阶段,包括但不限于以下几个关键步骤: 1. **项目规划与设计**:首先需要进行项目的可行性研究,确定产品定位…

docker和docker-compose的安装

docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话,进行 docker pull 等操作会比较慢。进入阿里云&…

Hudi Spark Sql Procedures 回滚 Hudi 表数据

前言 因为有 Hudi Rollback 的需求,所以单独总结 Hudi Spark Sql Procedures Rollback。 版本 Hudi 0.13.0(发现有bug)、(然后升级)0.14.1Spark 3.2.3Procedures 官方文档:https://hudi.apache.org/docs/procedures 相关阅读:Hudi Spark SQL Call Procedures学习总结…

【NI国产替代】电池模拟器,快速模拟 3C 产品电池的充放电功能

电池模拟器 快速模拟 3C 产品电池的充放电功能输出灵活可调节的电压/电流内置双向 DC-DC 降压变换器为 3C 产品提供漏电检测 电池模拟器系列包含单节双通道(1S)、双节双通道(2S)、三节单通道(3S)三种规格&…

C++基础与深度解析 | 异常处理 | 枚举与联合 | 嵌套类与局部类 | 嵌套名字空间与匿名名字空间 | 位域与volatile关键字

文章目录 一、异常处理二、枚举与联合三、嵌套类与局部类四、嵌套名字空间与匿名名字空间五、位域与volatile关键字 一、异常处理 异常处理用于处理程序在调用过程中的非正常行为。 传统的处理方法:传返回值表示函数调用是否正常结束。 例如,返回 0 表示…

中介子方程七

X$XFX$XEXyXαXiX$XαX$XiXαXyXEX$XFX$XEXyXαXiX$XαX$XiXαXyXEX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XdX$XpX$XdX$XyXeXαX$XEXyXαXiX$XαX$XiXαXyXEX$XαXeXyX$XdX$XpX$XdX$XhXαXeX$XηXqXαXpX$XWXyX$XyXWX$XαXtXηXαXpX$XEX$XZX$XpXαXηXtXαX$XWXyX$…

SpringBoot+Vue教师工作量管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 教师管理员 功能截图

声量2024 | 脱离『生活监狱』——对部分主流价值的质疑与冒犯

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 阿那亚 联合制作 / 声量The Power of Voice 特别鸣谢 / 深夜谈谈播客网络 本期节目录制于第二届「声量The Power of Voic…