MySQL -- 表的约束

概念引入:真正的约束表字段的是数据类型,但是数据类型的约束方式比较单一的,所以需要一些额外的一些约束,用于表示数据的合法性,在只有数据类型一种约束的情况下,我们比较难保证数据是百分百合法。通过添加不同的约束,我们就可以确保未来插入数据库表中的数据是符合预期的。而约束的本质其实就是通过技术手段让程序员插入正确的数据。反过来,站在数据库的角度,凡是插入进来的数据,均为符合数据约束的。而约束的最终目的就是保证数据的完整性和可预测性,因为数据库是保存用户数据的最后一道防线。

1 、约束的常用类型

1.1 空属性

空属性约束其实还是比较常见的,我们在表中就经常可以看见,比如


上图中的NUll,其实就是空属性,如果没有设置,我们一般默认为可以空。

在我们存储的数据中很多其实是不可以为空的,所以这就是为什么很多网页需要你注册身份信息时,很多项其实是必填项。数据库在存储这类数据时,也会设置空属性的约束,确保一些信息不为空。下面用一些图来演示一下

a.创建表

在这里插入图片描述

设置三个变量,班级和教室不为空,其他可以为空

b.插入正常数据

在这里插入图片描述

这里我们插入非空数据,发现没有问题。

c.插入缺失的数据

在这里插入图片描述

这里我们不插入others ,说明others默认就是可以不为空

d.继续插入缺失数据

在这里插入图片描述

当我们继续插入缺失数据时,我们可以发现,如果将设置为not null 类型的数据空插会导致数据对其进行拦截。

1.2 默认值

默认值这条约束其实非常简单,就是在插入的时候,设置某一行的值,系统会自动帮忙补上。设置default值也非常简单,只需要在创建表时,在类型后加上设置的默认值,例:create table t1 ( age tinyint unsigned default 18);另外我们还可以将not null与default搭配使用,确保插入数据不为空,不过这两个一般不一起使用

1.3 列描述

这种约束其实无法通过desc命令来显示,实际上这就相当于是一种注释,用于给程序员或DBA进行了解。

在这里插入图片描述

在上图明显可以发现,desc命令显示不出comment的内容.想要看见就需要使用show create table name /G命令,结果如下图

在这里插入图片描述

1.4 zerofill

这种约束其实是用于改变表中的数字表现形式,就比如,数据类型为int(10)这里的10就表示插入表时,如果插入数据不足十位的话会自动补零,但是如果超过十位了,那么该是多少就是多少。

插入后

在这里插入图片描述
需要注意的是,如果我们没有显示的设定数据类型的宽度但是加了zerofill属性,这里int会默认的显示宽度是11,unsigned int 是10,符号位也占一个宽度。这种显示方式并不会影响数据库对数据的存储与操作。

1.5 主键

主键在一张表中具有唯一属性,通常我们就可以看成和操作系统的pid一样,用于标识数据,我们在创建表时,可以在表后加上primary表示设置该类型为主键。例如下图:

在这里插入图片描述

这里的id Key就是PRI,表示唯一。当我们插入同样的id值时,就会出现一些问题。同时,当原有的表中没有主键约束的时候,可以插入多个重复id数据,如果此时你想要为id加上约束,数据库就会对你的操作进行拦截,只有你把相同的id数据删除时,才可以重新设置约束<,所以我们一般约定,在表创建的时候就设定主键

在这里插入图片描述

我们可以发现,当再次插入id为2的数据时,我们就会发现,数据库会进行拦截。那么是不是没有办法插入相同的id数据了呢?当然不是,这里虽然主键只能有一个,但是一个主键可以附加在多列上。例如,我们可以让id和sore一起作为键值,这样id为2的数据就可以重复地插入。

下面把原来的主键删除,设置新的主键

在这里插入图片描述

尝试插入相同的id/score值,两列数据做键值时,也不能插入两列一样的值。

在这里插入图片描述

1.5.1 自增长

自增长这个属于主键的一种额外特性,这个自增长需要和主键搭配使用,而且只能有一列享有自增长这个属性。自增长顾名思义就是自动会增长,当我们第一次插入了数据。如果有一列有是主键并有自增长属性,那么后面假设不插入这列数据,数据库也会自动帮你补上。例如: 当我们将id设置成主键并加上自增长这个特性的话,我们会发现,哪怕我们第一次插入数据时没有设定id值,数据库也会默认帮我们补上0(一般默认是零,可以另外设置)。后续插入数据还没有设置的话,会自动补上并增长大小,以确保唯一性。当然,如果你中间突然显示插入一个id = 1000 的数据,那么下次默认补齐的id就从1001开始,这是因为表中会自动记录下次自增长的值。下面用几张图来举例,方便理解

先创建一个带自增长属性的表

在这里插入图片描述

不断插入数据,观察是否带其中一列数据是否自增长

在这里插入图片描述

我们可以发现,数据确实在自行增长,并在我们主动设置数据后,会在主动设置的数据后增长。

在这里插入图片描述

数据库会自动记录下次的auto_increment需要增长到的值

在这里插入图片描述

1.5.2 唯一键

唯一键和主键在功能上非常类似,唯一键是用于解决表中的唯一性约束问题。主要是因为每一张表只能拥有一个主键,但是我们还有许多的属性都需要唯一性的约束。所以唯一键的存在就变得合理了,唯一键和主键虽然在功能上非常相似,但在一些细节上还是有差异的。例如主键是不能为空,而唯一键可以为空。唯一键的主要作用就是为了保证不和别的信息出现重复。 一般我们在创建表时,在一条数据类型后加上unique即可即可

1.5.3 外键

外键(Foreign Key)是数据库中用于建立表之间关系的一种约束,这种约束其实还是非常常见的,如下图

在这里插入图片描述

外键的存在可以确保数据之间存在较好的关联性,就比如上图中,我们是没有办法在最上面那张表中插入别的球员,因为下面的表中并没有其他球员的信息。当然,外键也是可以为NULL,如果外键列允许NULL,则子表中的记录可以不与主表中的任何记录相关联。一旦主从表关联了,对应关联的数据中,子表中插入的主表必须存在,否则会报错,下面用一小段代码来演示主从表之间如何建立联系。

-- 主表(父表)
CREATE TABLE departments (department_id INT PRIMARY KEY,department_name VARCHAR(255)
);-- 子表(从表)
CREATE TABLE employees (employee_id INT PRIMARY KEY,employee_name VARCHAR(255),department_id INT,FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

外键也是可以有名称的,如果没有设置,数据库会自动设置。

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

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

相关文章

嵌入式Zephyr RTOS面试题及参考答案

目录 Zephyr RTOS 的主要设计目标是什么?适用于哪些领域? Zephyr 支持哪些内核对象类型?举例说明其应用场景。 Zephyr 支持哪些线程同步机制?举例说明其适用场景。 Zephyr 内核支持哪些任务状态?状态转换的条件是什么? Zephyr 如何实现低延迟中断处理?(如直接中断服…

《TCP/IP网络编程》学习笔记 | Chapter 18:多线程服务器端的实现

《TCP/IP网络编程》学习笔记 | Chapter 18&#xff1a;多线程服务器端的实现 《TCP/IP网络编程》学习笔记 | Chapter 18&#xff1a;多线程服务器端的实现线程的概念引入线程的背景线程与进程的区别 线程创建与运行pthread_createpthread_join可在临界区内调用的函数工作&#…

C++相关基础概念之入门讲解(上)

1. 命名空间 C中的命名空间&#xff08;namespace&#xff09;是用来避免命名冲突问题的一种机制。通过将类、函数、变量等封装在命名空间中&#xff0c;可以避免不同部分的代码中出现相同名称的冲突。在C中&#xff0c;可以使用namespace关键字来定义命名空间。 然后我们在调…

创新技术引领软件供应链安全,助力数字中国建设

编者按 随着数字化转型的加速&#xff0c;针对软件供应链的攻击事件呈快速增长态势&#xff0c;目前已成为网络空间安全的焦点。如何将安全嵌入到软件开发到运营的全流程&#xff0c;实现防护技术的自动化、一体化、智能化&#xff0c;成为技术领域追逐的热点。 悬镜安全作为…

PyTorch 系列教程:使用CNN实现图像分类

图像分类是计算机视觉领域的一项基本任务&#xff0c;也是深度学习技术的一个常见应用。近年来&#xff0c;卷积神经网络&#xff08;cnn&#xff09;和PyTorch库的结合由于其易用性和鲁棒性已经成为执行图像分类的流行选择。 理解卷积神经网络&#xff08;cnn&#xff09; 卷…

【2025】基于python+django的驾校招生培训管理系统(源码、万字文档、图文修改、调试答疑)

课题功能结构图如下&#xff1a; 驾校招生培训管理系统设计 一、课题背景 随着机动车保有量的不断增加&#xff0c;人们对驾驶技能的需求也日益增长。驾校作为驾驶培训的主要机构&#xff0c;面临着激烈的市场竞争和学员需求多样化等挑战。传统的驾校管理模式往往依赖于人工操作…

【JavaWeb】快速入门——HTMLCSS

文章目录 一、 HTML简介1、HTML概念2、HTML文件结构3、可视化网页结构 二、 HTML标签语法1、标题标签2、段落标签3、超链接4、换行5、无序列表6、路径7、图片8、块1 盒子模型2 布局标签 三、 使用HTML表格展示数据1、定义表格2、合并单元格横向合并纵向合并 四、 使用HTML表单收…

MySQL 优化方案

一、MySQL 查询过程 MySQL 查询过程是指从客户端发送 SQL 语句到 MySQL 服务器&#xff0c;再到服务器返回结果集的整个过程。这个过程涉及多个组件的协作&#xff0c;包括连接管理、查询解析、优化、执行和结果返回等。 1.1 查询过程的关键组件 连接管理器&#xff1a;管理…

服务性能防腐体系:基于自动化压测的熔断机制

01# 背景 在系统架构的演进过程中&#xff0c;项目初始阶段都会通过压力测试构建安全护城河&#xff0c;此时的服务性能与资源水位保持着黄金比例关系。然而在业务高速发展时期&#xff0c;每个冲刺周期都被切割成以业务需求为单位的开发单元&#xff0c;压力测试逐渐从必选项…

六十天前端强化训练之第二十天React Router 基础详解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、核心概念 1.1 核心组件 1.2 路由模式对比 二、核心代码示例 2.1 基础路由配置 2.2 动态路由示例 2.3 嵌套路由实现 2.4 完整示例代码 三、关键功能实现效果 四、…

grad_traj_optimization 开源项目

开源项目 grad_traj_optimization 使用教程-CSDN博客 ubuntu如何切换到root用户_ubuntu切换到root用户-CSDN博客 catkin_make: command not found 解决办法_catkin-make not found-CSDN博客 这就说明需要编译的package虽然存在&#xff0c;但不在指定的目录下。catkin_make命…

深圳南柯电子|净水器EMC测试整改:水质安全与电磁兼容性的双赢

在当今注重健康生活的时代&#xff0c;净水器作为家庭用水安全的第一道防线&#xff0c;其性能与安全性备受关注。其中&#xff0c;电磁兼容性&#xff08;EMC&#xff09;测试是净水器产品上市前不可或缺的一环&#xff0c;它直接关系到产品在复杂电磁环境中的稳定运行及不对其…

要登录的设备ip未知时的处理方法

目录 1 应用场景... 1 2 解决方法&#xff1a;... 1 2.1 wireshark设置... 1 2.2 获取网口mac地址&#xff0c;wireshark抓包前预过滤掉自身mac地址的影响。... 2 2.3 pc网口和设备对接... 3 2.3.1 情况1&#xff1a;... 3 2.3.2 情…

GHCTF web方向题解

upload?SSTI! import os import refrom flask import Flask, request, jsonify,render_template_string,send_from_directory, abort,redirect from werkzeug.utils import secure_filename import os from werkzeug.utils import secure_filenameapp Flask(__name__)# 配置…

Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试(代码实现)

Vision Transformer (ViT)&#xff1a;将Transformer带入计算机视觉的革命性尝试 作为一名深度学习研究者&#xff0c;如果你对自然语言处理&#xff08;NLP&#xff09;领域的Transformer架构了如指掌&#xff0c;那么你一定不会对它在序列建模中的强大能力感到陌生。然而&am…

蓝耘携手通义万象 2.1 图生视频:开启创意无限的共享新时代

在科技飞速发展的今天&#xff0c;各种新奇的技术不断涌现&#xff0c;改变着我们的生活和工作方式。蓝耘和通义万象 2.1 图生视频就是其中两项非常厉害的技术。蓝耘就像是一个超级大管家&#xff0c;能把各种资源管理得井井有条&#xff1b;而通义万象 2.1 图生视频则像是一个…

IEC61850标准下MMS 缓存报告控制块 ResvTms详细解析

IEC61850标准是电力系统自动化领域唯一的全球通用标准。IEC61850通过标准的实现&#xff0c;使得智能变电站的工程实施变得规范、统一和透明&#xff0c;这大大提高了变电站自动化系统的技术水平和安全稳定运行水平。 在 IEC61850 标准体系中&#xff0c;ResvTms&#xff08;r…

【DeepSeek应用】DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了,虽然经过扩容和调整,但反应依旧不稳定,甚至小圆圈转半天最后却提示“服务器繁忙,请稍后再试。” 故此,本文通过讲解在本地部署 DeepSeek并配合python代码实现,让你零成本搭建自己的AI助理,无惧任务提交失败的压力。 一、环境准备 1. 安装依赖库 …

蓝思科技冲刺港股上市,双重上市的意欲何为?

首先&#xff0c;蓝思科技冲刺港股上市&#xff0c;这一举措是其国际化战略进入实质性阶段的重要标志。通过港股上市&#xff0c;蓝思科技有望进一步拓宽融资渠道&#xff0c;这不仅能够为公司带来更加多元化的资金来源&#xff0c;还能够降低对单一市场的依赖风险&#xff0c;…

深入探讨RAID 5的性能与容错能力:实验与分析(磁盘阵列)

前言—— 本实验旨在探讨 RAID 5 的性能和容错能力。通过创建 RAID 5 阵列并进行一系列读写性能测试及故障模拟&#xff0c;我们将观察 RAID 5 在数据冗余和故障恢复方面的表现&#xff0c;以验证其在实际应用中的可靠性和效率。 首先说明&#xff1a;最少三块硬盘, 使用 4 块…