五.MySQL表的约束

article/2025/7/18 19:37:35

1.not null空属性 和 default缺省值

两个值:null(默认的)和not null(不为空)

元素可以分为两类

1.not null 不能为空的,这种没有默认default 要手动设定,我们必须插入数据而且不能为NULL。但我们插入数据有两种方式 1.直接输入值 2.不输入用缺省值填入 当然缺省值不能为NULL。

2.另一种可以为null 这种default 缺省值默认为NULL. 也就是说不输入也可以自动用缺省值 直接输入值当然NULL也可以。

字段类型是否允许 NULL默认行为是否需要写 DEFAULT 手动设置
NOT NULL必须插入值 或 显式写 default✅ 是,默认没有默认值
允许为 NULL若不插入则默认default是 NULL❌ 可选,默认就是 NULL
  简单来说 什么类型的必须输入值呢?not null不能为空 且没有手动设置缺省值default

2.列描述comment

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

简单来说 就是在创建字段时 对该字段的注释

查看时 可以在show create table 表名\G

3.int(10)和zerofill

int(10) unsigned int(11)和zerofill。int不就是4字节大小吗?后面的(10) (11)是什么?
简单来说()里面的值和实际的存储空间大小没有关系。主要是配合zerofill使用,
1.创建时不加 zerofill 查找显示处理的数据 如果值为1 就显示1.
2.如果加上zerofill 类型int(10) 就会显示0000 0000 01,简单来说加上zerofill就是至少要显示10位数 前面空的补0,如果是int(1) 值为200 加上zerofill 会显示200 所以说是至少.
还要一个细节 为什么无符号默认是(10) 有符号(11) ,10位数可以表示所有的int值 但有符号数可以是负数要带上 - 所以要多一位 11.

字段定义插入值显示结果(不带 ZEROFILL)显示结果(带 ZEROFILL)
INT(5)424200042
INT(10) ZEROFILL10000000001
INT(3) ZEROFILL200200 ✅ 不会截断
zerofill是 显示格式,不改变实际值或大小  带上zerofill 自动加上unisgned表示无符号
为什么有符号是 INT(11),无符号是 INT(10)
类型默认宽度原因说明
INT UNSIGNED10最大值 4,294,967,295,最多10位数
INT11还要预留 1 位给 - 负号

4.主键primary key

在创建字段的后面加上primary key表示该字段为key值,不能在表中继续插入key值相同的行。

自动设置为不能为NULL 主键不能为NULL

1.删除主键

alter table 表名 add primary key;

2.追加主键(add主键时 表中不能有主键)

不建议在中途加主键 因为不知道原数据中是否有主键相同的行

alter table 表名 add primary key(字段列表);

复合主键

在 MySQL 中,创建复合主键(Composite Primary Key)就是让多个字段一起组成一个唯一标识,这几个字段组合起来不能重复,但每个字段单独可以重复。

方法1:建表时直接写在最后统一定义

方法2:表创建后用 alter table add 添加复合主键

要点说明
每个字段本身可以重复组合值不能重复
所有字段必须 NOT NULL即使你没写,MySQL 会自动加 NOT NULL
一张表只能有一个主键加复合主键前,要确保没有其他 PRIMARY KEY

5.自增长auto_increment

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长

简单总结:auto_increment

1.字段必须为整数 2.key一栏有值 3.只能有一个自增

为什么能知道下一个自增数是什么 就是因为在表级定义部分中记录了下一个自增数

提前更改auto_increment的值

alter table t_auto auto_increment = 100;

6.唯一键unique

主键:1.非空 2.字段值唯一 3.只能有一个主键
唯一键:1.可以为空 2.字段值唯一 3.可以有多个唯一键
主键是主身份标识,一张表只能有一个.唯一键是辅助性唯一约束,可以多个,用于保证其他字段不重复。

唯一键也可以加上not null表示不能为空

如何创建唯一键?

和设置主键方法一样

        1.字段后加 unique

        2.统一在末尾定义 unique key (字段名)

当然也有复合唯一键 创建方法也一样

        1.在末尾定义 unique key (字段名1,字段名2...)

        2.表创建后用 alter table add 添加复合唯一键

简单来说就是把primary key换成unique 或者unique key

7.外键foreign key (字段名) references 主表(列)

我们现在有两张表,一张记录学生名字+班级id,另一张记录班级id+班级名字。这两张表的信息是相关联的,即1.新增学生+班级id 班级id必须在另一张表中有。2.删除班级id行时,另一张表中不能还存在该班级id的学生。

被引用的是主表(myclass),引用别人的那张表是从表(stu)


为了提供上述关系的约束,我们就需要引入外键。

外键必须引用主表的主键或唯一键,必须要保证从表中的一个外键值(如 class_id)必须能够在主表中唯一匹配到一行记录(如 id

外键字段本身 不需要唯一:

stu.class_id 在学生表中可以重复(即多个学生在一个班级)。

1.先创建主键表

2.再创建从表

foreign key (字段名) references 主表(列)

3.插入行

外键字段 class_id 的值:必须存在于主表 class(id) 中,否则插入或更新都会失败。

 学生表 stu 中还有学生的 class_id = 1,正在引用这个班级。

禁止删除主表中仍被从表引用的行


http://www.hkcw.cn/article/ZyAAkuVXgm.shtml

相关文章

4.Haproxy搭建Web群集

一.案例分析 1.案例概述 Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,包括LVS、Nginx,LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能…

NewsNow:免费好用的实时新闻聚合平台,让信息获取更优雅(深度解析、部署攻略)

名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、NewsNow项目概览1. 项目核心亮点2. 技术架构特点 二、核心功能深度解析1. 智能新…

论文阅读笔记——FLOW MATCHING FOR GENERATIVE MODELING

Flow Matching 论文 扩散模型:根据中心极限定理,对原始图像不断加高斯噪声,最终将原始信号破坏为近似的标准正态分布。这其中每一步都构造为条件高斯分布,形成离散的马尔科夫链。再通过逐步去噪得到原始图像。 Flow matching 采取…

【leetcode】02.07. 链表相交

链表相交 题目代码1. 计算两个链表的长度2. 双指针 题目 02.07. 链表相交 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 代码 …

文字转图片的字符画生成工具

软件介绍 今天要介绍的这款软件可以将文字转换成图片的排列形式,非常适合需要将文字图形化的场景,建议有需要的朋友收藏。 软件名称与用途 这款软件名为《字符画大师》,是一款在网吧等场所非常流行的聊天辅助工具,其主要功能就…

Bitlocker密钥提取之SYSTEM劫持

该漏洞编号CVE-2024-20666,本文实现复现过程,Windows系统版本如下 简介 从Windows10(th1)开始,微软在winload模块中,增加了systemdatadevice字段值的获取,该字段值存储在BCD引导配置文件中。当…

明场检测与暗场检测的原理

知识星球里的学员问:明场检测与暗场检测原理上有什么区别? 如上图, 明场检测(Bright-field Inspection) 工作原理: 光线从近乎垂直照射到样品表面。 如果表面平整、无缺陷,光线会直接反射回镜…

STL解析——vector的使用及模拟实现

目录 1.使用篇 1.1默认成员函数 1.2其他常用接口 2.模拟实现 2.1源码逻辑参考 2.2基本函数实现 2.3增 2.4删 2.5迭代器失效 2.6拷贝构造级其他接口 2.7赋值运算符重载(现代写法) 2.8深层次拷贝优化 3.整体代码 在C中vector算正式STL容器,功能可以类比于…

day2实训

实训任务1 FTPASS wireshark打开 实训任务2 数据包中的线索 解码的图片 实训任务3 被嗅探的流量 过滤http,追踪post的http流 实训任务6 小明的保险箱 winhex打开

Window10+ 安装 go环境

一、 下载 golang 源码: 去官网下载: https://go.dev/dl/ ,当前时间(2025-05)最新版本如下: 二、 首先在指定的磁盘下创建几个文件夹 比如在 E盘创建 software 文件夹 E:\SoftWare,然后在创建如下几个文件夹 E:\S…

8.5 Q1|广州医科大学CHARLS发文 甘油三酯葡萄糖指数累积变化与 0-3期心血管-肾脏-代谢综合征人群中风发生率的相关性

1.第一段-文章基本信息 文章题目:Association between cumulative changes of the triglyceride glucose index and incidence of stroke in a population with cardiovascular-kidney-metabolic syndrome stage 0-3: a nationwide prospective cohort study 中文标…

重读《人件》Peopleware -(13)Ⅱ 办公环境 Ⅵ 电话

当你开始收集有关工作时间质量的数据时,你的注意力自然会集中在主要的干扰源之一——打进来的电话。一天内接15个电话并不罕见。虽然这看似平常,但由于重新沉浸所需的时间,它可能会耗尽你几乎一整天的时间。当一天结束时,你会纳闷…

ARXML解析与可视化工具

随着汽车电子行业的快速发展,AUTOSAR标准在车辆软件架构中发挥着越来越重要的作用。然而,传统的ARXML文件处理工具往往存在高昂的许可费用、封闭的数据格式和复杂的使用门槛等问题。本文介绍一种基于TXT格式输出的ARXML解析方案,为开发团队提供了一个高效的替代解决方案。 …

C#中数据绑定的简单例子

数据绑定允许将控件的属性和数据链接起来——控件属性值发生改变,会导致数据跟着自动改变。 数据绑定还可以是双向的——控件属性值发生改变,会导致数据跟着自动改变;数据发生改变,也会导致控件属性值跟着自动改变。 1、数据绑定…

训练和测试的规范写法

单通道图片的规范写法 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt import numpy as np# 设置中文字体支持 plt.rcParams[&quo…

【Web应用】若依框架:基础篇12 项目结构

文章目录 ⭐前言⭐一、课程讲解🌟1、寻找合适的对象✨1) ⭐二、怎样选择设计模式?🌟1、寻找合适的对象✨1) ⭐三、怎样使用设计模式?🌟1、寻找合适的对象✨1) ⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里…

系统设计——状态机模型设计经验

摘要 本文主要介绍了状态机模型的设计经验,包括其定义、适用场景、建模示例、事件驱动设计以及配置数据化等内容。状态机模型通过事件驱动控制状态变化,适用于流程驱动系统、生命周期管理等场景,不适用于状态变化简单或不确定的场景。文中还…

WSP 对CSV文件中E+如何恢复可用方案

背景 在日常工作中会遇到从系统软件中导出的csv文件,其中长的字符会被自动科学计数,转成E,导致数据失去原来的信息。 样例 从系统中导出的用户表,其中【mobile】和【serial_no】两列的数据被转化为E,失去原始的信息…

突破知识传统依赖:模型内在推理能力评估的基准测试集 KOR-Bench

项目主页:https://kor-bench.github.io/ GitHub: https://github.com/multimodal-art-projection/KOR-BENCH 论文:https://arxiv.org/abs/2410.06526 随着人工智能技术的迅猛发展,大模型评估已成为AI领域的关键议题。在前序文章中&#xf…

ReactHook有哪些

React 中常用的 Hooks 列表及用法 React Hooks 是 React 16.8 版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。以下是 React 中常用的 Hooks 列表及其详细用法: 1. useState useState 是用于在函数组件中添加状态的 Hook。通过调用…