【MySQL | 三、 表的约束介绍】
举例表结构
字段名称 | 字段类型 | 是否NULL | 键值 | 默认值 | 附加信息 |
---|---|---|---|---|---|
Field | Type | Null | Key | Default | Extra |
id | int | No | UNI(唯一键) | Null | auto_increment |
name | verchar(10) | No | PRI(主键) | Null | |
gender | enum | No | man | ||
age | tinyint | Yes | Null | ||
telphone | int | Yes | Null | ||
home_id | int | yes | MUL(外键) | Null |
目录
- 举例表结构
- 1. 空属性
- 2. 默认值 `Default`
- 3. 列描述 `commenet`
- 4. 主键 `primary key`
- 5. 唯一键 `unique key`
- 6. 外键 `foreign key (字段名) references 主表(列)`
- 7. 自增长 `auto_increment`
1. 空属性
-
两个值:null(默认的)和 not null(不为空)
- Null:是一种特殊的值,表示数据缺失、未知或者未定义。例如,在一个记录客户信息的数据库中,如果还没有获取到客户的电子邮箱地址,那么该“电子邮箱”字段可以设为Null。
- Not Null:是一种约束条件,即必须有一个确定的值。比如在一个订单表中,“订单编号”字段通常被定义为Not Null,因为每个订单都必须有一个唯一的编号来标识。
-
数据关联方面
- Null:在外键关联中,允许外键为Null可以表示一种松散的关联关系或者未关联的状态。例如,在一个用户 - 部门关系表中,用户的“部门ID”外键为Null可以表示该用户还没有分配到具体的部门。
- Not Null:当外键为Not Null时,强制建立了两个实体之间的紧密关联。例如,在一个订单 - 客户关系表中,“客户ID”外键为Not Null,这意味着每个订单都必须关联到一个具体的客户,保证了业务逻辑的完整性
-
创建表时数据库默认字段字段为空(default null),但是实际开发时,尽可能保证字段不为空,因为数据为空无法参与运算。
用法:
mysql > CREATE TABLE 表名称 (-> 字段1 数据类型 not null-> );
2. 默认值 Default
- 默认值的生效:数据在插入表数据的时候没有给该字段赋值,且该字段存在默认值,就使用默认值,否则报错。
用法:
mysql> create table 表名称 (-> name varchar(20) not null,-> age tinyint unsigned default 0,-> gender char(2) default '男'-> );--注意:not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空
3. 列描述 commenet
列描述:在构建表结构时用comment
来做描述,类似于注释,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解
用法:
mysql> create table tt12 (-> name varchar(20) not null comment '姓名',-> age tinyint unsigned default 0 comment '年龄',-> sex char(2) default '男' comment '性别'-> );
4. 主键 primary key
- 一张表中最多只能有一个主键
- 主键所在的列通常是整数类型
- 复合主键
- 一个主键可以是多列
primary key( [字段1], [字段2] )
- 主键约束:
- 唯一性:主键的值在表中必须是唯一的,不能重复。
- 非空性:主键列的值为
NOT NULL
。这是因为 NULL 表示缺失或未知的数据,而主键需要明确地标识每一行,不能是不确定的。
- 用法:
mysql> create table t2 (-> name varchar(10) primary key-> ); Query OK, 0 rows affected (0.00 sec)#复合主键用法: mysql> create table t3 (-> name varchar(10),-> age int,-> constraint pk_constraint_name primary key(name, age)-> ); Query OK, 0 rows affected (0.01 sec)
- 主外键自定义名称
constraint
,用法如上。
5. 唯一键 unique key
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多。
-
与主键比唯一键允许为NULL,而且可以多个为NULL。
-
用法:
mysql> create table student (-> id char(10) unique key comment '学号,不能重复,但可以为空',-> name varchar(10)-> ); Query OK, 0 rows affected (0.01 sec)
6. 外键 foreign key (字段名) references 主表(列)
- 主表
- 也称为父表,是在关系型数据库中拥有主键(Primary Key)的表。主键是一个或多个列的组合,其值唯一标识表中的每一行。主表中的数据通常是基础信息,不依赖于其他表的数据而存在。例如,在一个学生管理系统中,有一个 “班级” 表,它包含班级的基本信息,如班级编号(作为主键)、班级名称等,这个 “班级” 表就是主表。
- 从表
- 也称为子表,是包含外键(Foreign Key)的表。外键是一个或多个列,其值引用主表中主键的值,从表中的数据依赖于主表的数据而存在。继续上面的例子,有一个 “学生” 表,其中包含学生的信息,并且有一个 “班级编号” 列,该列引用 “班级” 表中的 “班级编号”,那么 “学生” 表就是从表。
- 主表则必须是有主键约束或unique约束。
- 外键约束
- 存在性约束:当在从表中插入或更新一条记录时,该记录的外键列的值必须是主表中主键列已经存在的值。这是为了保证数据的一致性和关联性。
- 允许 NULL 值:在某些情况下,外键列可以为 NULL。这通常表示一种特殊情况,即从表中的数据与主表中的数据没有关联。例,可能存在一些员工暂时未分配到任何部门,这时在 employees 表中该员工的 department_id 可以为 NULL。但这需要在定义外键时允许 NULL 值
- 用法
#先创建主表 mysql> create table myclass (-> id int primary key,-> name varchar(30) not null comment'班级名'-> );#创建从表 mysql> create table stu (-> id int primary key,-> name varchar(30) not null comment '学生名',-> class_id int,-> foreign key (class_id) references myclass(id)-> );
foreign key (字段名) references 主表(列)
7. 自增长 auto_increment
auto_increment:当插入数据时,若有该属性的字段被忽略,数据库会在上个值的基础上自动+1,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
- 任何一个字段要做自增长,数值必须要有唯一性。
- 自增长字段必须是整数
- 一张表最多只能有一个自增长列
相关文章:
【MySQL | 三、 表的约束介绍】
举例表结构 字段名称字段类型是否NULL键值默认值附加信息FieldTypeNullKeyDefaultExtraidintNoUNI(唯一键)Nullauto_incrementnameverchar(10)NoPRI(主键)NullgenderenumNomanagetinyintYesNulltelphoneintYesNullhome_idintyesMUL(外键)Null 目录 举例表结构1. 空…...
音频DSP的发展历史
音频数字信号处理(DSP)的发展历史是电子技术、计算机科学和音频工程共同进步的结果。这个领域的进展不仅改变了音乐制作、音频后期制作和通信的方式,也影响了音频设备的设计和功能。以下是对音频DSP发展历史的概述: 早期概念和理论…...
学习笔记-Kotlin
准备工作 下载安装kotlin编译器,记录此笔记时的版本是v1.2.10,目前最新发布版本是v2.1.10解压下载的安装包,配置环境变量指向bin目录(官方指导). 如果不想在本地安装环境,也可以使用在线编辑器 尝试编写第一个helloWorld 新建一个名为hello.kt的文件,内容如下: f…...
linux解压命令(可整理到CSDN)
1. tar -xvf ffmpeg-7.0.2.tar.xz x:表示解压文件。 v:表示在解压过程中显示文件(verbose模式)。这个选项是可选的,加上它可以让你看到正在解压的文件列表,但如果不加也不会影响解压过程。 f:…...
Boost Asio TCP异步服务端和客户端
服务端 消息分两次发送,第一次发送head,第二次发送body。接收也是先接收head,然后通过head结构中的body长度字段再接收body。 TcpServer.h #pragma once #include <atomic> #include <vector> #include <unordered_set> #…...
【Apache Doris】周FAQ集锦:第 29 期
引言 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和开发者分享有关 Apache Doris 的常见问题。 通过这个每周 FAQ 栏目,希望帮助社…...
速通Docker === 介绍与安装
目录 Docker介绍 Docker优势 Docker组件 Docker CLI (命令行接口) Docker Host (Docker 守护进程) 容器 (Container) 镜像 (Image) 仓库 (Registry) 关系总结 应用程序部署方式 传统部署 (Traditional Deployment) 虚拟化部署 (Virtualization Deployment) 容器部署…...
云平台一键部署【Video-Background-Removal】视频换背景,无任何限制,随意换
Video-Background-Removal 是一款革命性的视频背景替换工具,旨在让用户轻松实现视频背景的快速更换。无论你是专业创作者还是普通用户,这款软件都能让你在几秒钟内改变背景,完全消除限制,随心所欲,随时随地想换就换&am…...
AI刷题-最大矩形面积问题、小M的数组变换
目录 一、最大矩形面积问题 问题描述 输入格式 输出格式 输入样例 输出样例 数据范围 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、小M的数组变换 问题描述 测试样例 解题思路: 问题…...
ts类型断言各种写法
在 TypeScript 中,类型断言(Type Assertion)有两种主要的写法:**尖括号语法** (<Type>) 和 **as 关键字语法**。这两种方式都可以用来告诉编译器某个表达式的具体类型,但它们在不同的上下文中有各自的适用性和局…...
第十二章:算法与程序设计
文章目录: 一:基本概念 1.算法与程序 1.1 算法 1.2 程序 2.编译预处理 3.面向对象技术 4.程序设计方法 5.SOP标志作业流程 6.工具 6.1 自然语言 6.2 流程图 6.3 N/S图 6.4 伪代码 6.5 计算机语言 二:程序设计 基础 1.常数 …...
计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解
关注:CodingTechWork 引言 在计算机网络中,IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接,还是局域网(LAN)配置,它们都起着至关重要的作用。理解它们的工作原理&a…...
一文读懂高频考题!进程、线程、协程最全方位对比剖析
一、基本概念 (一)定义与特征 进程 在计算机科学里,进程是操作系统正在运行的程序的实例,是资源分配的基本单位。就好比每个进程都像一个小王国,它有自己独立的领土,这里的领土就是内存空间、代码块、数据和文件句柄等资源。比如说,你在电脑上同时打开一个文字处理软件…...
Elasticsearch搜索引擎(二)
RestClient 基础 前言一、RestAPI1. 初始化 *RestClient*2. 创建索引库3. 删除索引库4. 判断索引库是否存在 二、RestClient操作文档1.新增文档2.查询文档3. 删除文档4. 修改文档5. 批量导入文档 前言 ES官方提供了各种不同语言的客户端用来操作ES,这些客户端的本质…...
docker 部署 Kafka 单机和集群
一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装:docker --version如果未安装,可以访问 Docker 官网下载并安装 Docker Desktop(Windows 和 Mac)或使用包管理器安装(Linux&…...
新增文章分类功能
总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 目录 总说 一、功能实现 1.1 Controller层 1.2 Service层 1.3 Impl层 1.4 Mapper层 1.5 测试接口 二、优化 2.1 2.2 一、…...
[c语言日寄]精英怪:三子棋(tic-tac-toe)3命慢通[附免费源码]
哈喽盆友们,今天带来《c语言》游戏中[三子棋boss]速通教程!我们的目标是一边编写博文,一边快速用c语言实现三子棋游戏。准备好瓜子,我们计时开始! 前期规划 在速通中,我们必须要有清晰的前期规划…...
【Rust自学】12.1. 接收命令行参数
12.1.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数&am…...
Qt应用之MDI(多文档设计)
qt creator 版本6.8.0 MinGW 64bit 由此模块可以扩展成设计一个qt文本编辑器。 界面如下 部分功能展示如下 新建文件 打开文件 mdi模式、级联模式和平铺模式 界面和程序构建过程。 1.如图所需.cpp和.h文件 2.mainwindow.ui和tformdoc.ui界面布局如下 不懂什么是Action如何…...
使用FFmpeg和Python将短视频转换为GIF的使用指南
使用FFmpeg和Python将短视频转换为GIF的使用指南 在数字时代,GIF动图已成为表达情感和分享幽默的重要媒介。无论是社交媒体上的搞笑片段还是创意项目中的视觉效果,GIF都能迅速抓住观众的注意力。然而,很多人不知道如何将短视频转换为GIF。本…...
Qt 各版本选择
嵌入式推荐用 Qt4.8,打包的程序小:Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的 最后支持xp系统的长期支持版本:Qt5.6.3;Qt5.7.0是最后支持xp系统的非长期支持版本。 最后提供mysql数据库插件的版本…...
Web基础-分层解耦
思考:什么是耦合?什么是内聚?软件设计原则是什么? 耦合:衡量软件中各个层 / 各个模块的依赖关联程度。 内聚:软件中各个功能模块内部的功能联系。 软件设计原则:高内聚低耦合。 那我们该如何实现…...
G1原理—8.如何优化G1中的YGC
大纲 1.5千QPS的数据报表系统发生性能抖动的优化(停顿时间太小导致新生代上不去) 2.由于产生大量大对象导致系统吞吐量降低的优化(大对象太多频繁Mixed GC) 3.YGC其他相关参数优化之TLAB参数优化 4.YGC其他相关参数优化之RSet、PLAB和大对象的处理优化 1.5千QPS的数据报表系…...
Hugging Face 的 Trainer类用法
一、使用方法 Hugging Face 的 Trainer 类是一个高级API,用于简化训练、评估和预测的流程。以下是如何使用 Trainer 类的基本步骤: 1. 导入必要的类和函数 首先,您需要导入 Trainer 类以及其他可能需要的类或函数。 from transformers im…...
RabbitMQ前置概念
文章目录 1.AMQP协议是什么?2.rabbitmq端口介绍3.消息队列的作用和使用场景4.rabbitmq工作原理5.整体架构核心概念6.使用7.消费者消息推送限制(work模型)8.fanout交换机9.Direct交换机10.Topic交换机(推荐)11.声明队列…...
IDEA2023版中TODO的使用
介绍:TODO其实本质上还是注释,只不过加上了TODO这几个字符,可以让使用者快速找到。 注意:在类、接口等文件中,注释是使用// 即:// TODO 注释内容 在配置文件中,注释是使用# 即:# TO…...
(STM32笔记)十二、DMA的基础知识与用法 第二部分
我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…...
windows系统“GameInputRedist.dll”文件丢失或错误导致游戏运行异常如何解决?windows系统DLL文件修复方法
GameInputRedist.dll是存放在windows系统中的一个重要dll文件,缺少它可能会造成部分游戏不能正常运行。当你的电脑弹出提示“无法找到GameInputRedist.dll”或“计算机缺少GameInputRedist.dll”等错误问题,请不用担心,我们将深入解析DLL文件…...
使用分割 Mask 和 K-means 聚类获取天空的颜色
引言 在计算机视觉领域,获取天空的颜色是一个常见任务,广泛应用于天气分析、环境感知和图像增强等场景。本篇博客将介绍如何通过已知的天空区域 Mask 提取天空像素,并使用 K-means 聚类分析天空颜色,最终根据颜色占比查表得到主导…...
UML系列之Rational Rose笔记四:时序图(顺序图_序列图)
时序图有很多画法,这基本上能算rose里面要求最乱的一种图了;有些人的需求是BCE模式,这是正常规范点的,有些人就不需要,有些需要用数据库交互,有些不需要;没有一个较为统一的需求;在此…...
nginx反向代理http 和 https(案例)
说明:在香港开了一台虚拟机,主要用于将来自国外访问的80和443代理到大陆IDC机房 (1) 定义80和443的upstream 211.155.82.174 是keepalive中VIP对应的公网IP(在国内访问www.playyx.com解析到211.155.82.174) upstream new_server…...
Dify应用-工作流
目录 DIFY 工作流参考 DIFY 工作流 2025-1-15 老规矩感谢参考文章的作者,避免走弯路。 2025-1-15 方便容易上手 在dify的一个桌面上,添加多个节点来完成一个任务。 每个工作流必须有一个开始和结束节点。 节点之间用线连接即可。 每个节点可以有输入和输出 输出类型有,字符串,…...
装备制造业:建立项目“四算”管理:以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系
尊敬的各位管理层: 大家好!作为装备制造业的 CFO,我今天要向大家汇报的是如何建立项目“四算”管理,即以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系。在当前市场竞争激烈、成本压力不断增大…...
Centos7将/dev/mapper/centos-home磁盘空间转移到/dev/mapper/centos-root
1、查看存储 df -h文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 126G 0 126G 0% /dev tmpfs 126G 0 126G 0% /dev/shm tmpfs 126G 19M 126G 1% /run tmpfs …...
docker 部署 MantisBT
1. docker 安装MantisBT docker pull vimagick/mantisbt:latest 2.先运行实例,复制配置文件 docker run -p 8084:80 --name mantisbt -d vimagick/mantisbt:latest 3. 复制所需要配置文件到本地路径 docker cp mantisbt:/var/www/html/config/config_inc.php.…...
【Vue - Element 】实现表单输入框的远程搜索功能
需求 表单是一个常见的元素,而在表单中,常常需要用户从大量的数据中选择一个或多个选项。 为了提高用户体验,提供远程搜索功能可以帮助用户快速找到所需的选项,而不是从冗长的下拉列表中手动查找。 以该需求为例,我…...
学习华为熵减:激发组织活力(系列之三)
目录 为什么学习华为? 学习华为什么? 一、势:顺势而为,在风口上猪都会飞起来。 二、道:就是认识和利用规律层面,文化和制度创新就是企业经营之道。 三、法:就是一套价值管理的变革方法论。…...
多种vue前端框架介绍
学如逆水行舟,不进则退。 在现今的软件开发领域,Vue.js凭借其高效、灵活和易于上手的特性,成为了前端开发的热门选择。对于需要快速搭建企业级后台管理系统的开发者而言,使用现成的Vue后台管理系统模板无疑是一个明智之举。 本文…...
C语言重点回顾(持续更新中~)
个人见解,有异议可以留言~ 第一讲:初识C语言 目录 1.编译和链接 2.main函数 3.库函数 4.关键字 5.字符和字符串 6.转义字符 1.编译和链接 初始的C语言源代码是一个文本文件,要想将一个文本文件变成一个执行文件,需要经过编…...
Navicat Premium 原生支持阿里云 PolarDB 数据库
近日,我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证,这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎(PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…...
青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据
青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据 一、UI数据二、Element Plus处理响应式数据三、Vuetify处理响应式数据 课题摘要:本文探讨了UI数据在用户界面中的重要性和处理方法。UI数据包括展示数据、用户输入、状态数据等,对用户体验和应用交互性有直…...
用css和html制作太极图
目录 css相关参数介绍 边距 边框 伪元素选择器 太极图案例实现、 代码 效果 css相关参数介绍 边距 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}div{width: …...
软件测试入门—功能需求分析:以一个旅游管理系统为例
在软件测试的旅程中,功能需求分析是测试人员构建高质量测试用例的基础,它确保软件的各项功能都能按照预期正常运行。接下来,我们将以一个旅游管理系统为例,详细阐述如何进行功能需求分析,帮助大家更清晰地掌握这一重要…...
深度解析Linux中关于操作系统的知识点
操作系统概述与核心概念 任何计算机系统都包含一个基本的程序集合,成为操作系统OS 操作系统是一款进行软硬件管理的软件 操作系统包括: 内核(进程管理,内存管理,驱动管理) 其他程序(例如数据…...
【深度学习】关键技术-激活函数(Activation Functions)
激活函数(Activation Functions) 激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…...
分布式ID的实现方案
1. 什么是分布式ID 对于低访问量的系统来说,无需对数据库进行分库分表,单库单表完全可以应对,但是随着系统访问量的上升,单表单库的访问压力逐渐增大,这时候就需要采用分库分表的方案,来缓解压力。 …...
电脑有两张网卡,如何实现同时访问外网和内网?
要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…...
Linux 查看内存命令
目录 1. free 2. vmstat 3. top 4. htop 5. /proc/meminfo 1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h -h 选项:以易读的格式(如GB、MB)显示内存大小。…...
无法联网怎么在docker中安装Ribbitmq
如果无法连接互联网,无法在Docker中安装RabbitMQ。但是,您可以使用本地镜像或者手动下载RabbitMQ的Docker镜像并进行安装。 以下是使用本地镜像的步骤: 从可以上网的计算机上拉取RabbitMQ的官方Docker镜像: docker pull rabbitmq:…...
Spring Boot 定时任务搭建及Quartz对比详解
前言: 之前在帮别人搭建定时任务时 被问到为什么不用 Quartz 反而使用 SpringBoot 定时任务 以下是 SpringBoot 定时任务 的使用情况 大家可参考具体情况选择使用 1. 概述: Spring Boot 定时器是基于 Spring Framework 的 Task Scheduling 模块实现的…...