【MySQL】数据类型与表约束
目录
数据类型分类
数值类型
tinyint类型
bit类型
小数类型
字符串类型
日期和时间类型
enum和set
表的约束
空属性
默认值
列描述
zerofill
主键
自增长
唯一键
外键
数据类型分类

数值类型

tinyint类型


- MySQL中,整形可以是有符号和无符号的,默认有无符号的。
- 可以通过unsigned来说明某个字段是无符号的。
- 如果我们向MySQL特定的的类型中插入不合法数据,MySQL是直接拦截,不让我们做对应的操作(这一点和语言不同)。反过来,如果已经有数据被成功插入到MySQL中了,一定插入的时候是合法的。所以,MySQL中,数据类型本身也是一种约束。
bit类型
bit[(M)],M表示每个值的位数,范围从1到64。如果忽略M,那么默认是1。

- bit字段在显示时,是按照ASCII码对应的值显示;
小数类型
float
float[(m,d)][unsigned]:m显示指定长度,d指定小数位数,占用4字节。
例如,float(4,2)表示的范围是-99.99~99.99,MySQL在保存值会进行四舍五入(99.991->99.99)。如果定义的是float(4,2)unsigned,范围是0-99.99。
decimal
decimal(m,d)[unsigned]:m显示指定长度,d指定小数位数。
- decimal(5,2)表示的范围是-999.99-999.99
- decimal(5,2)unsigned表示的范围是0-999.99
- decimal和float很像,只是精度不一样,decimal更精确。
字符串类型
char
char(L):固定长度字符串,L是可以存储的长度,单位是字符,最长可以是255。
这里的char和语言中的char不一样,char(2)可以存放两个字符,可以是字母或汉字,但是不能超过2个,最多是255个。
varchar
varchar(L):可变长度字符串,L表示字符长度,最长为65535个字节。
L是这个字符串长度的上限,其真实长度可能小于等于这个长度。
- varchar字节数可以指定为0-65535之间的值,但有1-3个字节用于记录数据大小,所以有效字节数是65532;
- 当表的编码是utf8时,varchar(n)的最大值是65532/3=21844(utf8中一个字符占用3个字节)。
char和varchar的比较

如何选择定长或变长字符串?
- 如果数据确定长度都一样且不变,那就使用char,比如,身份证,手机号。如果数据长度有变化,那就使用varchar,比如,名字,地址,但是要保证最长的能存进去。
- 定长的磁盘空间比较浪费,但是效率高;变长的磁盘空间比较节省,但是效率低。
- 定长的意义是,直接开辟好对应的空间;变长的意义是在不超过自定义范围的情况下,用多少开辟多少。
日期和时间类型
常用的日期有如下3个:
- date:日期‘yyyy-mm-dd’,占用三个字节;
- datetime时间日期格式‘yyyy-mm-dd HH:ii:ss’,占用8字节;
- timestamp:时间戳,和datetime格式完全一致,占用4字节。
当对表进行更新时,timestamp数据(如果有)自动更新。
enum和set
enum:枚举,单选类型,enum('选项1','选项2',...)。这些选项值依次对应1 2 3 4 5 6...。
set:集合,多选类型,set('选项1','选项2',...)。在插入时,如果传入多个选项,可以使用逗号分隔符传进去,也可以用数组下标(位图方式表示,这些选项的每个选项值依次对应如下数字,1 2 4 8 16 32...)。
创建表:

插入数据:

想查询所有喜欢登山的人:

这样查询不能查出所有结果。
集合查询函数find_in_set函数:
find_in_set(sub,str_list):如果sub在str_list中,那么返回下标(非0);如果不在,返回0。

查询爱好登山的人:

查询爱好登山和篮球的人:

表的约束
表的约束,表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的,约束本质是通过技术手段,倒逼程序员,插入正确的数据。反过来,站在MySQL的角度,凡是插入进来的数据,都是符合数据约束的!
约束的最终目标:保证数据的完整性和可预期性。
空属性
- 两个值:null(默认)和not null;
例子:创建一个表,包含班级名称和所在教室,这两个字段不能为空。

当插入数据时,如果没有给not null的字段传入值,那么会报错。
默认值
default:如果设置了,用户将来插入,有具体的数据,就用用户的,没有就用默认的。

如下图,如果我们没有明确指定一列要插入,用的是default,如果建表中,对应列没有默认的default值,则无法直接插入。

default和not null不冲突,而是相互补充的,not null是当用户想插入的时候,约束的是,要么是NULL,要么是合法数据。而default是当用户忽略这一列的时候,使用默认值(如果设置了),如果没有设置,直接报错!
列描述
comment,没有实际含义,会根据表创建语句保存,用来给程序员看的进行了解。

通过show语句可以查看comment:

zerofill

我们看到int(10),这个10代表什么?实际上,如果没有zerofill这个属性的话,括号内的数字毫无意义。
如果没有设置zerofill,那么显示结果是:

如果设置了zerofill属性,那么显示结果是:

这就是说,如果宽度小于设定的宽度,自动填充0。这只是最后显示的结果,实际存储的还是200,我们可以通过hex函数证明:

主键
主键:primary key用来唯一约束该字段里的数据,不能重复,不能为空(自动设置为not null),一张表中最多有1个主键,主键所在的列通常是整数类型。
案例:
- 创建表的时候直接在字段上指定主键;


- 主键中的字段不能重复,一旦重复就会失败;

- 删除主键

- 当表创建好但是还没主键的时候,可以再次追加主键;

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


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



如果插入主键值,那下次从这个值开始自增长。

通过last_insert_id()查询上次插入的键值。
唯一键
一张表中往往有多个字段需要唯一性,数据不能重复,但是一张表中只能有一个主键;唯一键就可以解决表中有多个字段需要唯一性约束的问题。唯一键的本质和主键差不多,但唯一键允许为空,且可以多个为空,空字段不做唯一性比较。
唯一键和主键的区别:主键更多的是标识唯一性的,而唯一键更多是保证在业务上,不要和别的信息出现重复。比如在员工管理系统,可以将员工身份证号作为主键,同时为了保证员工号不出现输入重复错误,可以将员工号作为唯一键。
一般把和业务无关的字段设为主键,这样当业务调整的时候,就不会对主键做过大的调整。

外键
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,从表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
语法:
foreign key (字段名) references 主表(列)

创建主表:

创建从表:

相关文章:
【MySQL】数据类型与表约束
目录 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 字符串类型 日期和时间类型 enum和set 表的约束 空属性 默认值 列描述 zerofill 主键 自增长 唯一键 外键 数据类型分类 数值类型 tinyint类型 MySQL中,整形可以是有符号和无符号的&…...
CAG技术:提升LLM响应速度与质量
标题:CAG技术:提升LLM响应速度与质量 文章信息摘要: CAG(Cache-Augmented Generation)通过预加载相关知识到LLM的扩展上下文中,显著减少了检索延迟和错误,从而提升了响应速度和质量。与传统的R…...
上位机知识篇---Linux源码编译安装链接命令
文章目录 前言第一部分:Linux源码编译安装1. 安装编译工具2. 下载源代码3. 解压源代码4. 配置5. 编译6. 测试(可选)7. 安装8. 清理(可选)9.注意事项 第二部分:链接命令硬链接(Hard Link…...
科研绘图系列:R语言绘制线性回归连线图(line chart)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图保存图片系统信息参考介绍 科研绘图系列:R语言绘制线性回归连线图(line chart) 加载R包 library(tidyverse) library(ggthemes) libra…...
将ollama迁移到其他盘(eg:F盘)
文章目录 1.迁移ollama的安装目录2.修改环境变量3.验证 背景:在windows操作系统中进行操作 相关阅读 :本地部署deepseek模型步骤 1.迁移ollama的安装目录 因为ollama默认安装在C盘,所以只能安装好之后再进行手动迁移位置。 # 1.迁移Ollama可…...
Oracle 创建用户和表空间
Oracle 创建用户和表空间 使用sys 账户登录 建立临时表空间 --建立临时表空间 CREATE TEMPORARY TABLESPACE TEMP_POS --创建名为TEMP_POS的临时表空间 TEMPFILE /oracle/oradata/POS/TEMP_POS.DBF -- 临时文件 SIZE 50M -- 其初始大小为50M AUTOEXTEND ON -- 支持…...
cursor ide配置远程ssh qt c++开发环境过程记录
cursor是啥就不介绍了,好像是目前最好用的ai ide,下面主要是配置远程ssh连接linux机器进行qt5 c程序运行的配置过程记录。 一、c_cpp_properties.json 在项目根目录的.vscode目录里面新建c_cpp_properties.json文件,根据你的实际情况配置该文…...
yolov5错误更改与相关参数详解(train.py)
1.错误更改 main中相关参数 if __name__ __main__:parser argparse.ArgumentParser()parser.add_argument(--weights, typestr, default, helpinitial weights path)parser.add_argument(--cfg, typestr, defaultmodels/yolov5s.yaml, helpmodel.yaml path)parser.add_arg…...
Python设计模式 - 组合模式
定义 组合模式(Composite Pattern) 是一种结构型设计模式,主要意图是将对象组织成树形结构以表示"部分-整体"的层次结构。这种模式能够使客户端统一对待单个对象和组合对象,从而简化了客户端代码。 组合模式有透明组合…...
css粘性定位超出指定宽度失效问题
展示效果 解决办法:外层容器添加display:grid即可 完整代码 <template><div class"box"><div class"line" v-for"items in 10"><div class"item" v-for"item in 8">drgg</div>&…...
Windows 程序设计6:错误码的查看
文章目录 前言一、说明二、使用GetLastError找到错误的原因三、使用错误码的宏总结 前言 Windows 程序设计6:错误码的查看。 一、说明 有时写的代码单纯看是没有问题的,但是执行起来就会崩溃。因此要养成判断函数执行是否成功的习惯,除非这…...
doris: CSV导入数据
本文介绍如何在 Doris 中导入 CSV 格式的数据文件。Doris 支持灵活的 CSV 格式配置,包括自定义分隔符、字段包围符等,并提供多种导入方式以满足不同场景的数据导入需求。 导入方式 Doris 支持以下方式导入 CSV 格式数据: Stream LoadBro…...
FastStone Image Viewer图像处理软件安装步骤(百度网盘链接)
软件简介:一款小巧便捷的添加水印、特效、图片处理软件,让使用者可以通过它的操作界面来浏览图片,且还支持了幻灯播放的功能,让使用者能够轻松的浏览目录中的所有图片。 网盘链接:https://pan.baidu.com/s/1Zvrx7fXwb6…...
Kafka 深入服务端 — 时间轮
Kafka中存在大量的延迟操作,比如延时生产、延时拉取和延时删除等。Kafka基于时间轮概念自定义实现了一个用于延时功能的定时器,来完成这些延迟操作。 1 时间轮 Kafka没有使用基于JDK自带的Timer或DelayQueue来实现延迟功能,因为它们的插入和…...
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
一、前言 我从24年11月份开始学习网络爬虫应用开发,经过2个来月的努力,于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志(网络爬虫学习:应用selenium从搜…...
【go语言】结构体
一、type 关键字的用法 在 go 语言中,type 关键字用于定义新的类型,他可以用来定义基础类型、结构体类型、接口类型、函数类型等。通过 type 关键字,我们可以为现有类型创建新的类型别名或者自定义新的类型。 1.1 类型别名 使用 type 可以为…...
Spring Boot是什么及其优点
简介 Spring Boot是基于Spring框架开发的全新框架,其设计目的是简化Spring应用的初始化搭建和开发过程。 Spring Boot整合了许多框架和第三方库配置,几乎可以达到“开箱即用”。 优点 可快速构建独立的Spring应用。 直接嵌入Tomcat、Jetty和Underto…...
谷氨酸:大脑功能的多面手
标题:谷氨酸:大脑功能的多面手 文章信息摘要: 谷氨酸是大脑中最主要的兴奋性神经递质,参与了90%以上的神经元激活,在蛋白质合成、味觉(鲜味)以及神经可塑性中发挥重要作用。它与GABA、多巴胺等…...
SpringCloudGateWay和Sentinel结合做黑白名单来源控制
假设我们的分布式项目,admin是8087,gateway是8088,consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目,那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以࿱…...
HTML新春烟花
系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心(简易版)7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心(双心版)10…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
