Mysql 常见数据类型及约束
Mysql 常见数据类型及约束
最近在跟几个不太懂技术的同事(哈哈, 其实我也不懂), 要整一个数据库项目, 然后前端, 后端, 都没有像样的, 数据输出还不是由我们控制....
这可难受了, 然后总数被围绕着, 怎么导入数据, 导出EXCEL .... 之类的, 或者是说导入数据不方便, 怎么字段还要有类型.... 每至于此, 我其实内心是崩溃的, 但非常理解. 不理解, 还能怎么办呢.(当然, 开个玩笑)
这里引出一个问题, 为啥要舌设置类型以及约束? 因为数据类型影响着数据存储的资源占用空间和保证数据的完整性. 经常让我头疼的是, 拿到一些都是公式嵌套的Excel表, 一打开, 该进程直接凉凉, 或者是表没有唯一标识, 或是字段总在变化, 这可让我难受坏了, so, 规则的约定是非常重要的呀, 于是找了一些常用的, 做一个简单记录.
小结: 数据类型是为了"节约内存,提高计算", 数据约束是为了, 完整性(存储关系).
数据类型
常用数据类型
- 整数: tinyint, smallint(2, 无符号, 0-32367), mediumint (3, 8388607), int...
- 小数: decimal, float, double..
- 字符串: char, varchar, text...
- 时间日期: date, time, datetime
- 枚举型: enum
- decimal 表示浮点数, 如decimal(5,2)表示一个有5位数, 小数占2位
- char 表示固定长度的字符串, 如char(5), 如果值是"yg", 则会自动补齐空格
- varchar表可变长度字符串, 如, varchar(5), 值为"yg",则存储的仍是'yg'
- text 表示存大文本, 一种说法是说, 字符大于4000时才会用
常见数据约束
-
Primary key: 物理上的存储顺序, 主键, 一个表设置id字段, 类型为 int unsigned.
-
Not null: 该字段不允许空值.
-
Unique: 该字段不允许值重复.
-
Default: 给该字段给定一个默认值.
-
Foreign key: 表之间的"沟通"字段, 在insert 和delete是都要先在关联表中查询.
虽然外键约束可以保证数据的有效性, 做开发时也非常方便, 但在增删查改时, 会降低数据库性能, 不能随意增删数据(好比excel的数据嵌套了其它表), 操作上的确有些难受.
附-数据类型(常用)
整数类型
类型 | 字节 | Signed | Unsigned |
---|---|---|---|
tinyint | 1 | -128 ~ 127 | 0 ~ 255 |
smallint | 2 | -32768 ~ 32767 | 0 ~ 65535 |
mediumint | 3 | -838 8608 ~ 838 8608 | 0 ~ 1677 7215 |
int | 4 | -21 4748 3648 ~ 21亿 | 0 ~ 42亿 |
bigint | 8 | 很大 | 0 ~ 真的大 |
字符串
类型 | 字节 |
---|---|
char | 0 ~ 65535 |
varchar | 0 ~ 65535 |
text | 0 ~ 很大 |
效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char。
char和varchar可以有默认值,text不能指定默认值。
数据库选择合适的数据类型存储还是很有必要的,对性能有一定影响. 对于int类型的,如果不需要存取负值,最好加上unsigned;对于经常出现在where语句中的字段,考虑加索引,整形的尤其适合加索引。
日期时间类型
类型 | 字节 | 演示 |
---|---|---|
date | 4 | "2020-01-01" |
time | 3 | "12:56:49" |
datetime | 8 | "2020-01-01 12:12:12" |
year | 1 | '2020' |
timestamp | 4 | 2019-10-05 22:21:23 |
小结
-
数据类型是为了"节约内存,提高计算", 数据约束是为了, 完整性(存储关系).
-
Mysql常用的数据类型: bit, int; decimal, float; char, varchar; date, time, date time; enum...
-
尽量使用占位空间小的类型, 同时为提高查询效率, 可建立合适的索引.
-
Mysql常见字段约束: Primary key; Not null; Unique; Default; Foreign key.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通