MYSQL表的约束详解!

文章目录

  • 前言
  • 一、空属性
  • 二、默认值
  • 三、列描述
  • 四、zerofill
  • 五、主键
  • 六、自增长
  • 七、唯一键
  • 八、外键


前言

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。


一、空属性

空属性有两个值:

  • null (默认值)
  • not null

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办
法参与运算。

在这里插入图片描述

所以我们在设计数据库表的时候,一定要在表中进行限制,不满足上面条件的数据就不能插入到表中。这就是“约束”。

例如我们创建一个学生信息表,插入有空的数据时就会报错:

在这里插入图片描述

二、默认值

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。

例如下面的表将sex 的属性设为default 后,我们如果不插入该属性,就会用默认值。

在这里插入图片描述

但默认值并非什么时候都能省略,如下面这种情况,如果省略将会造成语义歧义然后报错!

在这里插入图片描述

三、列描述

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。

对于列的描述,使用desc 查看表的结构时不可见,使用show 可看见:

在这里插入图片描述

四、zerofill

我们创建表时,会发现 int 后会有 (11) 这个数字,我们不理解它的含义:

在这里插入图片描述

但是如果我们添加了 zerofill 属性:

在这里插入图片描述

这次可以看到a的值由原来的12变成0000 0000 12,这就是zerofill属性的作用,如果宽度小于设定的宽度(这里设置的是10),自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是12。为什么是这样呢?我们可以用hex函数来证明。

在这里插入图片描述

五、主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

我们可以在创建表的时候添加主键:

在这里插入图片描述

我们也可以对表进行追加主键,取消主键:

在这里插入图片描述

主键约束:主键对应的字段不能重复,一旦重复,操作失败。

在这里插入图片描述

复合主键:在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。

在这里插入图片描述

对于复合主键来说,只有当被设置为主键的多个字段都相同时,才会发生主键约束:

在这里插入图片描述

六、自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

在这里插入图片描述

自增长的特点:

  1. 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  2. 自增长字段必须是整数
  3. 一张表最多只能有一个自增长

索引:

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

七、唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

验证唯一键约束不能重复:

在这里插入图片描述

验证唯一键可以为空:

在这里插入图片描述

八、外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

语法:foreign key (字段名) references 主表()

我们先建表:

在这里插入图片描述

查看表结构:

在这里插入图片描述

我们先向主键表(myclass)插入两条数据,再向从表(stu)插入两条数据,我们插入class_id=10时成功了,而插入class_id=30时失败了。这是因为class_id被外键(myclass表中的id)约束,既然myclass表中没有id=30,那么stu表中的class_id也不能存在30。这就使所谓的外键约束!

在这里插入图片描述

在业务逻辑上,我们不可能向一个不存在的班级中插入学生信息,所以学生表中的班级需要被外键约束,来排除一些不符合逻辑的操作,这就是外键逻辑的功能!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CANoe使用大全】——Logging窗口

🙋‍♂️【CANoe使用大全】系列💁‍♂️点击跳转 文章目录 1.概述2.Logging窗口打开方式3.创建Logging4.配置4.1. 命名4.2.格式选择4.3. 路径选择与命名4.3.1.Logging文件命名_自定义4.3.2.Logging文件命名_系统内选择 5.Logging触发方式5.1 Logging模块…

QT实现USB摄像头接入显示

一、UVC协议简介 UVC全称是USB Video Class(USB视频类),是一种标准化的USB视频设备通信协议,它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现,解决了摄像头厂商之间互不兼容,以及摄像头应…

win10通过ssh链接deepin23并开启x11转发

前提 主机环境:win10 lstc 虚拟机环境:deepin23beta2 终端:tabby x11服务器: vcxsrv 安装ssh sudo apt install ssh开启root登录(看你需求) 首先你要给root账号设置密码 sudo passwd root修改配置文件 sudo vim /etc/ssh/ss…

MongoDB本地部署并结合内网穿透实现公网访问本地数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 4. 结语 前言 MongoDB是一个基于分布式文件…

Linux-ROS学习之旅-话题编程(二)

##承接上一篇文章的知识,有下面的实例操作 通过代码新生一个海龟,放置在(5,5)点,命名为turtle2,通过代码订阅turtle2的实时位置并打印在终端,控制turtle2实现旋转运动 步骤: 1.创建一个工作空间和一个功…

【GitHub项目推荐--30 天学会XXX(HTML/React/Python/JavaScript)】【转载】

30 天学会 React 这个项目是《30 天 React 挑战》,是在 30 天内学习 React 的分步指南。它需要你学习 React 之前具备 HTML、CSS 和 JavaScript 知识储备。 除了 30 天学会 React,开发者还发布过 30 天学会 JavaScript 等项目。 开源地址:…

MySQL数据操纵语言DML

MySQL数据操纵语言DML(SELECT,UPDATE,INSERT INTO,DELETE) 目录 MySQL数据操纵语言DML(SELECT,UPDATE,INSERT INTO,DELETE)DML关键字数据操纵语言DML1.查表2.插入数据3.更新数据4.删除数据 DML关键字 DML关键字含义SELECT从数据库中检索数据INSERT INTO向数据库表中插入新的行…

什么是协方差矩阵?

协方差矩阵(Covariance Matrix)是一个用于衡量多个变量之间相互关系的工具,在统计学和数据分析领域中非常重要。这个矩阵展现了每一对变量之间的协方差。协方差是衡量两个变量如何一起变化的度量;如果两个变量的协方差是正的&…

基于springboot+vue的美容院管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

运维SRE-01 目录结构体系、find

1. Linux目录结构体系 Linux 核心目录的核心文件概述 1) /etc下面 a) /etc/hosts 主机ip地址与域名(主机名)对应关系 b) /etc/hostname 主机名 c) /etc/sysconfig/network-scripts/ifcfg-ens33或ifcfg-eth0 Linux网卡配置文件 d)了解 /etc/i…

12.6管道流(血干JAVA系列)

管道流 12.6管道流基础概念【例12.34】验证管道流 12.6管道流 基础概念 管道流的主要作用是可以进行两个线程间的通信,如图12-9所示,分为管道输出流(PipedOutputStream)、管道输入流(PipedlnputStream)。如果要想进行管道输出,则必须把输出…

基于蛙跳优化的神经网络数据预测matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过蛙跳优化算法,优化神经网络的权值参数,然后使用优化后的神经网络模型对数据进行预测,输出预测曲线。 2.测试软件版本以及…

2024 年 eBPF 和网络趋势预测

本文地址:2024 年 eBPF 和网络趋势预测 | 深入浅出 eBPF 1. eBPF 1.1 eBPF 将继续呈指数增长1.2 eBPF 应用市场1.3 eBPF 在手机中得到更广泛的应用1.4 eBPF 滥用带来的风险2. 可观测 2.1 最受欢迎的可观测性2.2 降低可观测性开销2.3 上下文感知的 Kubernetes 工作负…

多数据源组件dynamic-datasource使用总结

简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。 其支持 Jdk 1.7, SpringBoot 1.5.x 2.x.x 3.x.x。 特性 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库敏感配置信息 加密…

matlab基本操作

目录 1 清空workspace 2 清空命令行窗口 3 求字符的ASCII码 4 矩阵的表示 5 矩阵的转置 6 按列输出 7 求逆矩阵 8 创建零矩阵 9 生成随机数 10 生成空数组 11 生成单位矩阵 12 生成幻方矩阵 13 结构体 14 重复 15 点乘与叉乘 16 寻找符合条件的元素…

Hadoop, HIve, Spark关系简述

大数据∈数据管理系统的范畴 数据管理系统: 数据怎么存?数据怎么算? 单机数据管理时代下, 数据处理的任务:IO密集型; 数据存不下? HDFS用于存放多机器的数据并提供相关Api接口。 HDFS中引入了…

146基于matlab的齿轮非线性动力学

基于matlab的齿轮非线性动力学,绘出系统状态变量随参数变化分岔图,绘图参数对应的系统各周期及混沌状态的时间历程图、相轨迹图、Poincare映射图,程序已调通,可直接运行。 146 matlab 齿轮非线性动力学 相图 (xiaohongshu.com)

【前端web入门第二天】01 html语法实现列表与表格_合并单元格

html语法实现列表与表格 文章目录: 1.列表 1.1 无序列表1.2 有序列表1.3 定义列表 2.表格 2.1 表格基本结构2.2 表格结构标签2.3 合并单元格 写在最前,第二天学习目标: 列表 表格 表单 元素为嵌套关系 1.列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表…

【leetcode题解C++】101.对称二叉树 and 111.二叉树的最小深度 and 222.完全二叉树的节点个数 and 110.平衡二叉树

101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 思路&#xff1a…

2023启示录|虚拟人这一年

图片|《银翼杀手 2049》剧照 作者丨程心 编辑丨罗辑 2023 年,大模型 “救活” 了很多行业,其中最为反转的,就是把虚拟数字人(以下简称虚拟人)从活死人墓里拉了出来。 还没开年,在 2022 年火…