MySQL-表的约束(上)

表的约束

        在 MySQL 中,表的约束(Constraints)用于确保数据库中数据的完整性和一致性。它们定义了对表中数据的规则和限制,防止无效或不一致的数据被插入、更新或删除。常见的 MySQL 表约束包括主键约束(PRIMARY KEY)外键约束(FOREIGN KEY)唯一约束(UNIQUE)非空约束(NOT NULL)检查约束(CHECK)默认约束(DEFAULT)自增约束(AUTO_INCREMENT)等,这些约束可以在创建表时定义,也可以使用 ALTER TABLE 语句在已存在的表上添加或修改。合理使用约束可以大大提高数据库中数据的质量和可靠性。

        但事实上真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合 法性,从业务逻辑角度保证数据的正确性。 表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key

空属性

        在 MySQL 中,空属性(NULL/NOT NULL) 是最基础也最常用的表约束之一,用于控制列是否允许存储 NULL 值(表示 "无值" 或 "未知值")。

  • NULL:表示列允许存储空值(默认行为)
  • NOT NULL:强制列必须存储具体值,不允许为空

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

如图所示

案例:

        创建一个班级表,包含班级名和班级所在的教室。

        站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 。

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



如图所示

        我们创建一个名为“myclass”的表来测试一下。

        然后,查看一下表的数据结构

        可以看到,我们在创建数据表的时候,定义了字段“class-name”和“class-room”not null,以及字段“other” null然后我们来测试一下这两个字段是否允许 null

        插入几组数据来做测试。

        通过测试可以发现字段“other”是允许为 null 的,而字段“class-name”和“class-room”是不允许为 null 的



默认值

        在 MySQL 中,默认值约束(DEFAULT) 用于为表中的列指定一个默认值。当向表中插入数据时,如果没有为该列提供具体值,MySQL 会自动使用默认值填充。



        我们创建一个名为“t13”的表来测试一下。

        查看一下表的数据结构

        插入几组数据来测试一下。

       查看一下插入的数据。

       我们这时插入数据是正常插入的。

       假设我们只插入name这一列。

        可以看出,这时其余两项是默认插入的,并不是用户主动插入的

        我们创建一个表再来看一下。

        查看一下这张表的数据结构。

   我们可以看到Default列是默认值。如果插入数据时没有指定该列的值,会使用默认值。name 的默认值是 NULL,但由于 name 不允许为 NULL,所以插入时必须显式指定 name 的值。age 的默认值是 18gender 的默认值是 男。

        我们不妨忽略gender和age试试。

        可以看出,我们所忽略的值都是被默认插入了。



注意:

  1. 与 NOT NULL 结合:默认值通常与 NOT NULL 一起使用,确保列既有默认值又不允许为空

    sql

  2. 函数作为默认值:MySQL 支持使用某些函数作为默认值。

  3. 插入时覆盖默认值:如果插入数据时指定了具体值,将覆盖默认值

列描述

        在 MySQL 中,“列描述” 并不是一种约束,而是用于对表中的列进行说明、注释,方便其他开发者或自己后续了解列的含义等信息。可以通过 COMMENT 关键字来为列添加描述信息。



        这部分我们就来简单了解一下。

        创建一个表来进行测试并查看一下表结构。

        插入几组数据。

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



zerofill

        在 MySQL 中ZEROFILL 是一种针对数值类型列的特殊约束(更准确地说是一种格式属性),用于在数值的显示长度不足时,自动在前面补零(0)。

  • 仅影响数值的显示形式,不改变数据的实际存储值
  • 自动为列隐式添加 UNSIGNED 属性(无符号,即只能存储非负数值)


如图所示

        创建一个表,并查看一下它的表结构。

         可以看到int(10),这个代表什么意思呢?整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个 属性,括号内的数字是毫无意义的。

        现在我们来插入几组数据。

        接着修改一下它的数据结构。

        但是对列添加了zerofill属性后,显示的结果就有所不同了。

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

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

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

相关文章

Frida + FART 联手:解锁更强大的 Android 脱壳新姿势

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ Frida FART 联手能带来什么提升? 增强 FART 的脱壳能力:解决对抗 FART 的壳、动态加载的 dex 的 dump 和修复; 控制 FART…

TLS/SSL(传输层安全协议)

文章目录一、核心概念二、为什么需要 TLS/SSL?三、工作原理与详细流程握手步骤详解:1.ClientHello & ServerHello:2.服务器认证 (Certificate, ServerKeyExchange):3.客户端响应 (ClientKeyExchange, Finished):4.…

什么是 AWS 和 GCE ?

AWS 和 GCE 是两种不同厂商提供的云计算服务,主要区别在于提供商和产品定位。AWS全称:Amazon Web Services提供商:亚马逊 (Amazon)简介:全球最大的云计算平台之一,提供完整的云服务,包括: 计算&…

水电站电动机绝缘安全 “不掉线”!在线监测方案筑牢发电保障

对水电站而言,消防水泵、深井水泵等辅助电动机是安全运行的 “关键配角”—— 它们常年处于备用状态,又受潮湿环境影响,绝缘值降低易引发烧毁故障,而传统定期检测难以及时捕捉绝缘劣化趋势,一旦启动时出问题&#xff0…

【Datawhale之Happy-LLM】3种常见的decoder-only模型——Github最火大模型原理与实践教程task07

Task07:第三章 预训练语言模型PLM (这是笔者自己的学习记录,仅供参考,原始学习链接,愿 LLM 越来越好❤) 本篇介绍3种很典的decoder-only的PLM(GPT、LlaMA、GLM)。目前火&#x1f52…

【卷积神经网络】卷积神经网络的三大核心优势:稀疏交互、参数共享与等变表示

1. 引言 卷积神经网络(CNN)之所以在计算机视觉、语音识别等领域取得突破性进展,并非偶然。相比传统的全连接神经网络,CNN通过三个重要的思想来帮助改进机器学习系统:稀疏交互(sparse interactions)、参数共享(parameter sharing)、等变表示(equivariant representations)。…

网络共享协议

网络共享协议是用于在计算机网络中实现资源共享和数据传输的规则或标准。常见的共享协议包括文件共享、打印机共享、互联网连接共享等。SMB(Server Message Block 服务器消息块)SMB是一种网络共享协议,主要用于局域网中实现不同设备之间的文件…

MD5加密算法详解与实现

MD5加密算法详解与实现 什么是MD5加密? MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,可以产生一个128位(16字节)的哈希值,通常用32位的十六进制数表示。MD5由Ronald Rivest在…

(nice!!!)(LeetCode 每日一题) 3025. 人员站位的方案数 I (排序)

题目:3025. 人员站位的方案数 I 思路:排序,时间复杂度0(n^2)。 将数组points里的元素先按横坐标x升序排序,纵坐标y降序排序。第一层for循环枚举左上角的点,第二层for循环枚举右下角的点。细节看注释。 C版本&#xff…

可可图片编辑 HarmonyOS(4)图片裁剪

可可图片编辑 HarmonyOS(4)图片裁剪-canvas 前言 可可图片编辑 实现了图片的裁剪功能,效果如图所示。这里的核心技术是使用了canvas。 Canvas 入门 Canvas提供画布组件,用于自定义绘制图形,开发者使用CanvasRenderi…

怎么用PS制作1寸证件照(已解决)

方法/步骤一、按住键盘上的“Ctrl”“O”打开你要制作的照片二、点击裁剪工具 (调整为宽:2.5cm,高:3.5cm,分辨率:300像素),设置之后直接框选出需要剪切保留的位置(使人物居正中), 然后按上面的“√”,以便确认剪裁三、…

Qt libcurl的下载、配置及简单测试 (windows环境)

Qt libcurl的下载、配置及简单测试引言一、libcurl下载二、在Qt Creator中配置三、简单测试引言 curl(Client URL)是一个开源的命令行工具和库,用于传输数据支持多种协议(如HTTP、HTTPS、FTP、SFTP等)。其核心库libcur…

【Python语法基础学习笔记】竞赛常用标准库

前言此系列笔记是拨珠自己的学习笔记,自用为主,学习建议移步其他大佬的专门教程。math库Python 的 math 库是标准库之一,提供了大量数学运算相关的函数,适用于基础数学计算、科学计算等场景。下面详细介绍其使用方法及常用功能&am…

我的项目我做主:Focalboard+cpolar让团队协作摆脱平台依赖

文章目录前言1. 使用Docker本地部署Focalboard1.1 在Windows中安装 Docker1.2 使用Docker部署Focalboard2. 安装Cpolar内网穿透工具3. 实现公网访问Focalboard4. 固定Focalboard公网地址前言 “项目管理软件又涨价了!“小团队负责人小林发愁——刚习惯操作逻辑&…

【3D 入门-4】trimesh 极速上手之 3D Mesh 数据结构解析(Vertices / Faces)

【3D入门-指标篇上】3D 网格重建评估指标详解与通俗比喻【3D入门-指标篇下】 3D重建评估指标对比-附实现代码【3D 入门-3】常见 3D 格式对比,.glb / .obj / .stl / .ply Mesh 数据结构解析 1. Vertices(顶点) original_vertices mesh_ful…

无需服务器,免费、快捷的一键部署前端 vue React代码--PinMe

作为前端的开发,有时候想部署一个项目真的是很“受气”,要不就是找运维,或者后端,看别人的时间,或者走流程。 现在,有这么一个神器PinMe, 以前部署项目:自己买服务器?域名、 SSL、N…

【LeetCode_26】删除有序数组中的重复项

刷爆LeetCode系列LeetCode26题:github地址前言题目描述题目与思路分析代码实现算法代码优化LeetCode26题: github地址 有梦想的电信狗 前言 本文介绍用C实现leetCode第26题题目链接:https://leetcode-cn.com/problems/remove-duplicates-…

CMake构建学习笔记23-SQLite库的构建

1. 构建思路 在前文中构建了大量的库包程序(参看CMake构建学习笔记-目录)之后,可以总结一下在Windows下使用脚本构建程序的办法: 使用CMake构建。这是目前最通用最流行的构建方式,大部分C/C程序都在逐渐向这个方向转…

Watt Toolkit下载安装并加速GitHub

一、下载 官方地址:(Steam++官网) - Watt Toolkit Gitee下载地址:https://gitee.com/rmbgame/SteamTools/releases/tag/3.0.0-rc.16

DevOps运维与开发一体化及Kubernetes运维核心详解

前言: 在云原生时代,技术的融合与流程的重构已成为驱动业务创新的核心引擎。Kubernetes作为容器编排的事实标准,其稳定的运维能力是业务应用的基石;而DevOps所倡导的开发与运维一体化文化,则是实现快速交付和价值流动的…