首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 存储:一个完整的数据存储过程是怎样的?
02 | 字段:这么多字段类型,该怎么定义?
03 | 表:怎么创建和修改数据表?
04 | 增删改查:如何操作表中的数据?
05 | 主键:如何正确设置主键?
06 | 外键和连接:如何做关联查询?
07 | 条件语句:WHERE 与 HAVING有什么不同?
08 | 聚合函数:怎么高效地进行分组统计?
09 | 时间函数:时间类数据,MySQL是怎么处理的?
10 | 如何进行数学计算、字符串处理和条件判断?
11 | 索引:怎么提高查询的速度?
12 | 事务:怎么确保关联操作正确执行?
13 | 临时表:复杂查询,如何保存中间结果?
14 | 视图:如何简化查询?
15 | 存储过程:如何提高程序的性能和安全性?
16 | 游标:对于数据集中的记录,该怎么逐条处理?
17 | 触发器:如何让数据修改自动触发关联操作,确保数据一致性?
18 | 权限管理:如何控制数据库访问,消除安全隐患?
19 | 日志(上):系统出现问题,如何及时发现?
20 | 日志(下):系统故障,如何恢复数据?
21 | 数据备份:异常情况下,如何确保数据安全?
22 | 范式:如何消除冗余,实现高效存取?
23 | ER模型:如何理清数据库设计思路?
24 | 查询有点慢,语句该如何写?
25 | 表太大了,如何设计才能提高性能?
26 | 如何充分利用系统资源?
27 | 手把手带你设计一个完整的连锁超市信息系统数据库(上)
28 | 手把手带你设计一个完整的连锁超市信息系统数据库(下)
当前位置:
首页>>
技术小册>>
MySQL必知必会核心内容
小册名称:MySQL必知必会核心内容
### 02 | 字段:这么多字段类型,该怎么定义? 在MySQL数据库设计中,字段(也称为列)是构成表的基本单元,它们定义了表中每一行数据的具体内容和结构。MySQL提供了丰富多样的字段类型,以满足不同场景下的数据存储需求。正确选择和使用字段类型,对于提升数据库性能、保证数据完整性和优化查询效率至关重要。本章将深入探讨MySQL中的主要字段类型及其应用场景,帮助读者在设计数据库时做出合理的字段定义决策。 #### 一、数值类型 数值类型用于存储数字数据,MySQL中的数值类型大致可以分为整型、浮点型和定点数类型。 ##### 1. 整型 整型字段用于存储不带小数部分的数值。MySQL提供了几种不同大小的整型,以适应不同范围的数据存储需求。 - **TINYINT**:非常小的整数,带符号的范围是-128到127,无符号的范围是0到255。适用于存储年龄、小型分类ID等。 - **SMALLINT**:小整数,带符号的范围是-32,768到32,767,无符号的范围是0到65,535。适用于存储较大范围的分类ID、计数等。 - **MEDIUMINT**:中等整数,带符号的范围是-8,388,608到8,388,607,无符号的范围是0到16,777,215。适用于需要更大范围整数的场景。 - **INT/INTEGER**:标准整数,带符号的范围是-2,147,483,648到2,147,483,647,无符号的范围是0到4,294,967,295。这是最常用的整数类型,适用于大多数整数场景。 - **BIGINT**:大整数,带符号的范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807,无符号的范围是0到18,446,744,073,709,551,615。用于存储极大范围的整数,如人口统计、大型计数等。 ##### 2. 浮点型和定点数 浮点型和定点数类型用于存储带有小数部分的数值。 - **FLOAT**:单精度浮点数,非精确值,适用于不需要极高精度的科学计算和经济分析。 - **DOUBLE**:双精度浮点数,比FLOAT具有更高的精度,适用于需要更高精度的计算。 - **DECIMAL(M, D)** 或 **NUMERIC(M, D)**:定点数,M是数字的最大位数(精度),D是小数点后的位数(标度)。DECIMAL类型用于存储精确的小数,如货币计算,因为它可以精确地表示小数点后的值,不会因四舍五入而产生误差。 #### 二、日期和时间类型 MySQL提供了多种日期和时间类型,用于存储日期、时间或日期时间组合的数据。 - **DATE**:仅日期,格式为YYYY-MM-DD,范围从'1000-01-01'到'9999-12-31'。 - **TIME**:仅时间,格式为HH:MM:SS,可以包含时间戳的小数秒部分。范围从'-838:59:59'到'838:59:59'。 - **DATETIME**:日期和时间组合,格式为YYYY-MM-DD HH:MM:SS,时间部分可以是'00:00:00'到'23:59:59'。范围从'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。 - **TIMESTAMP**:时间戳,与DATETIME类似,但范围较小('1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC),并且具有时区转换功能。 - **YEAR**:年份,格式为YYYY,范围从1901到2155。 #### 三、字符串类型 字符串类型用于存储文本数据,MySQL提供了多种字符串类型,以支持不同长度的文本。 - **CHAR(M)**:定长字符串,M指定了字符串的最大长度(1到255个字符)。如果存储的字符串长度小于M,MySQL会在末尾填充空格以达到指定长度,但在检索时会去除这些空格。适用于存储长度几乎相等的字符串,如密码、电话号码等。 - **VARCHAR(M)**:变长字符串,M指定了字符串的最大长度(1到65,535个字符,实际限制取决于字符集和最大行大小)。VARCHAR类型仅存储必要的字符以及一个额外的长度字节或两个长度字节(如果列的最大长度大于255)。这是最常用的字符串类型,因为它可以节省存储空间,适用于存储长度可变的字符串,如姓名、地址等。 - **TINYTEXT**、**TEXT**、**MEDIUMTEXT**、**LONGTEXT**:这四种类型用于存储大量文本,分别有不同的最大长度限制(TINYTEXT最大255字节,TEXT最大65,535字节,MEDIUMTEXT最大16,777,215字节,LONGTEXT最大4,294,967,295字节)。它们适用于存储文章、网页内容等大量文本数据。 #### 四、二进制数据类型 二进制数据类型用于存储二进制数据,如图片、音频、视频等文件的二进制内容。 - **BINARY(M)** 和 **VARBINARY(M)**:与CHAR和VARCHAR类似,但用于存储二进制数据。BINARY是定长的,VARBINARY是变长的。 - **BLOB** 类型(TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB):用于存储大量的二进制数据,分别有不同的大小限制,类似于TEXT类型但用于二进制数据。 #### 五、枚举和集合类型 枚举(ENUM)和集合(SET)类型提供了在表中创建“下拉列表”或“复选框”的功能,用于存储预定义的值列表。 - **ENUM('value1', 'value2', ...)**:允许你指定一个字符串对象的列表,该对象可以包含一个列表中的值。ENUM类型的列可以存储这些值中的任何一个,并且列表中的值按照在定义时出现的顺序存储。 - **SET('value1', 'value2', ...)**:与ENUM类似,但SET类型的列可以存储零个或多个列表中的值,这些值以逗号分隔。 #### 六、如何选择合适的字段类型 在选择合适的字段类型时,应考虑以下因素: 1. **存储需求**:根据数据的预期大小和范围选择合适的类型。 2. **性能影响**:不同类型的数据在存储、检索和排序时的性能表现不同。 3. **精度要求**:对于需要高精度计算的场景(如货币计算),应选择DECIMAL类型。 4. **兼容性**:考虑与应用程序或外部系统的数据交互需求。 5. **未来扩展**:预留一定的扩展空间,以应对未来数据增长的需求。 综上所述,正确选择和使用MySQL中的字段类型,是数据库设计中的重要环节。通过本章的学习,读者应该能够根据不同场景下的数据存储需求,合理选择适合的字段类型,从而设计出高效、稳定、可扩展的数据库系统。
上一篇:
01 | 存储:一个完整的数据存储过程是怎样的?
下一篇:
03 | 表:怎么创建和修改数据表?
该分类下的相关小册推荐:
MySQL从入门到精通(五)
MySQL从入门到精通(一)
MySQL8.0入门与实践
MySQL从入门到精通(三)
MySQL从入门到精通(四)
SQL零基础到熟练应用(增删改查)
MySQL 实战 45 讲
MySQL从入门到精通(二)
MySQL必会核心问题
细说MySQL(零基础到高级应用)