内容简介:本文主要介绍MySQL相关知识,包括安装、配置、优化等内容。风哥教程参考MySQL官方文档MySQL SQL Syntax、MySQL Server Administration。
Part01-基础概念与理论知识
1.1 什么是数据类型
数据类型是指列、变量和表达式可以存储的数据种类。在MySQL中,选择合适的数据类型对于数据库的性能、存储效率和数据完整性都非常重要。 01 更多视频教程www.fgedu.net.cn
1.2 数据类型的重要性
- 性能优化:合适的数据类型可以提高查询速度和存储效率
- 数据完整性:正确的数据类型可以防止无效数据的输入
- 存储空间:选择合适的数据类型可以减少存储空间的使用
- 查询效率:适当的数据类型可以提高索引效率
Part02-生产环境规划与建议
2.1 数值类型
用于存储数字数据,包括整数、浮点数和定点数。 02 学习交流加群风哥微信: itpux-com
2.1.1 整数类型
| 数据类型 | 存储空间 | 取值范围 | 描述 |
|---|---|---|---|
| TINYINT | 1字节 | -128 到 127 | 非常小的整数 |
| SMALLINT | 2字节 | -32768 到 32767 | 小整数 |
| MEDIUMINT | 3字节 | -8388608 到 8388607 | 中等大小整数 |
| INT | 4字节 | -2147483648 到 2147483647 | 标准整数 |
| BIGINT | 8字节 | -9223372036854775808 到 9223372036854775807 | 大整数 |
2.1.2 浮点数类型
| 数据类型 | 存储空间 | 取值范围 | 描述 |
|---|---|---|---|
| FLOAT | 4字节 | ±1.175494351E-38 到 ±3.402823466E+38 | 单精度浮点数 |
| DOUBLE | 8字节 | ±2.2250738585072014E-308 到 ±1.7976931348623157E+308 | 双精度浮点数 |
2.1.3 定点数类型
| 数据类型 | 存储空间 | 描述 |
|---|---|---|
| DECIMAL(M,D) | 可变 | 定点数,M是总位数,D是小数位数 |
2.2 字符串类型
用于存储文本数据。
2.2.1 定长字符串
| 数据类型 | 存储空间 | 描述 |
|---|---|---|
| CHAR(M) | M字节 | 定长字符串,M最大为255 |
2.2.2 变长字符串
| 数据类型 | 存储空间 | 描述 |
|---|---|---|
| VARCHAR(M) | 可变 | 变长字符串,M最大为65535 |
| TEXT | 可变 | 最大长度为65535字节 |
| MEDIUMTEXT | 可变 | 最大长度为16777215字节 |
| LONGTEXT | 可变 | 最大长度为4294967295字节 |
2.2.3 二进制字符串
| 数据类型 | 存储空间 | 描述 |
|---|---|---|
| BINARY(M) | M字节 | 定长二进制字符串 |
| VARBINARY(M) | 可变 | 变长二进制字符串 |
| BLOB | 可变 | 二进制大对象,最大长度为65535字节 |
2.3 日期时间类型
用于存储日期和时间数据。
| 数据类型 | 存储空间 | 取值范围 | 描述 |
|---|---|---|---|
| DATE | 3字节 | 1000-01-01 到 9999-12-31 | 日期 |
| TIME | 3字节 | -838:59:59 到 838:59:59 | 时间 |
| DATETIME | 8字节 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 日期时间 |
| TIMESTAMP | 4字节 | 1970-01-01 00:00:01 到 2038-01-19 03:14:07 | 时间戳 |
| YEAR | 1字节 | 1901 到 2155 | 年份 |
2.4 其他类型
2.4.1 枚举类型
| 数据类型 | 存储空间 | 描述 |
|---|---|---|
| ENUM(‘value1′,’value2’,…) | 1或2字节 | 枚举类型,只能存储预定义的值之一 |
2.4.2 集合类型
| 数据类型 | 存储空间 | 描述 |
|---|---|---|
| SET(‘value1′,’value2’,…) | 1-8字节 | 集合类型,可以存储多个预定义的值 |
2.4.3 JSON类型
| 数据类型 | 存储空间 | 描述 |
|---|---|---|
| JSON | 可变 | 存储JSON格式数据 |
Part03-生产环境项目实施方案
3.1 最小化存储空间
- 选择能够满足需求的最小数据类型
- 例如:存储年龄使用TINYINT而不是INT
- 存储小整数使用SMALLINT而不是INT
3.2 考虑数据完整性
- 选择能够确保数据完整性的数据类型
- 例如:存储日期使用DATE而不是VARCHAR
- 存储货币使用DECIMAL而不是FLOAT
3.3 考虑查询性能
- 整数类型的查询性能通常比字符串类型好
- 定长类型(如CHAR)的查询性能通常比变长类型(如VARCHAR)好
- 对于频繁查询的列,选择合适的数据类型可以提高索引效率
3.4 考虑未来扩展性
- 选择数据类型时要考虑未来数据的增长
- 例如:存储用户ID时,考虑未来用户数量的增长,选择合适的整数类型
Part04-生产案例与实战讲解
4.1 数值类型使用场景
示例:
-- 存储年龄(0-120)
age TINYINT UNSIGNED
-- 存储用户ID(预计不超过1000万)
user_id INT AUTO_INCREMENT PRIMARY KEY
-- 存储大整数(如订单号)
order_id BIGINT
-- 存储价格(精确到分)
price DECIMAL(10,2)
-- 存储科学计算数据
measurement FLOAT
4.2 字符串类型使用场景
示例:
-- 存储用户名(固定长度)
username VARCHAR(50)
-- 存储密码哈希值(固定长度)
password CHAR(64) -- 假设使用SHA-256哈希
-- 存储文章内容
content TEXT
-- 存储图片或文件
file BLOB
4.3 日期时间类型使用场景
示例: 03 学习交流加群风哥QQ113257174
-- 存储出生日期
birth_date DATE
-- 存储会议时间
meeting_time TIME
-- 存储订单创建时间
created_at DATETIME
-- 存储最后更新时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-- 存储年份
year_published YEAR
4.4 其他类型使用场景
示例:
-- 存储用户状态
status ENUM('active', 'inactive', 'deleted')
-- 存储用户兴趣
interests SET('sports', 'music', 'reading', 'travel')
-- 存储配置信息
config JSON
Part05-风哥经验总结与分享
5.1 隐式转换
MySQL会在某些情况下自动进行数据类型转换。
示例:
-- 字符串转换为数字
SELECT '123' + 1; -- 结果为124
-- 数字转换为字符串
SELECT 123 + '456'; -- 结果为579
-- 日期转换为字符串
SELECT DATE('2026-04-01'); -- 结果为'2026-04-01'
5.2 显式转换
使用CAST()或CONVERT()函数进行显式数据类型转换。
示例: 04 风哥提示:
-- 转换为字符串
SELECT CAST(123 AS CHAR);
SELECT CONVERT(123, CHAR);
-- 转换为数字
SELECT CAST('123' AS INT);
SELECT CONVERT('123', INT);
-- 转换为日期
SELECT CAST('2026-04-01' AS DATE);
SELECT CONVERT('2026-04-01', DATE);
6. 数据类型最佳实践
6.1 数值类型最佳实践
- 使用UNSIGNED存储非负数值
- 对于货币数据,使用DECIMAL而不是FLOAT或DOUBLE
- 选择合适的整数类型,避免使用过大的类型
6.2 字符串类型最佳实践
- 对于短字符串,使用VARCHAR而不是TEXT
- 对于固定长度的字符串,使用CHAR
- 避免使用过长的VARCHAR,根据实际需求设置合适的长度
6.3 日期时间类型最佳实践
- 对于需要自动更新的时间戳,使用TIMESTAMP
- 对于范围较大的日期,使用DATETIME
- 避免使用字符串存储日期时间
6.4 其他类型最佳实践
- 对于有限的预定义值,使用ENUM
- 对于多个可选值,使用SET
- 对于半结构化数据,使用JSON
7. 常见错误与解决方案
7.1 数据类型选择过大
问题:使用了过大的数据类型,浪费存储空间
解决方案:根据实际需求选择合适的数据类型
7.2 浮点数精度问题
问题:使用FLOAT或DOUBLE存储货币数据,导致精度丢失
解决方案:使用DECIMAL存储货币数据
7.3 日期时间存储错误
问题:使用字符串存储日期时间,导致查询困难
解决方案:使用专门的日期时间类型
7.4 索引效率问题
问题:对TEXT或BLOB类型创建索引,影响性能
解决方案:避免对大字段创建索引,或只对前缀创建索引 05更多学习教程公众号风哥教程itpux_com
8. 示例:表结构设计
示例:用户表设计
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- 用户ID
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名
email VARCHAR(100) NOT NULL UNIQUE, -- 电子邮件
password CHAR(64) NOT NULL, -- 密码哈希
first_name VARCHAR(50), -- 名
last_name VARCHAR(50), -- 姓
age TINYINT UNSIGNED, -- 年龄
gender ENUM('male', 'female', 'other'), -- 性别
status ENUM('active', 'inactive', 'deleted') DEFAULT 'active', -- 状态
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);
示例:产品表设计
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY, -- 产品ID
name VARCHAR(100) NOT NULL, -- 产品名称
description TEXT, -- 产品描述
price DECIMAL(10,2) NOT NULL, -- 价格
stock INT UNSIGNED NOT NULL, -- 库存
category_id INT, -- 分类ID
status ENUM('active', 'inactive', 'deleted') DEFAULT 'active', -- 状态
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 更新时间
);
9. 总结
本教程介绍了MySQL数据类型的选择与使用,包括: 06 from mysql视频:www.itpux.com
- MySQL支持的各种数据类型
- 数据类型的分类和特性
- 数据类型选择的原则
- 常见数据类型的使用场景
- 数据类型转换
- 数据类型的最佳实践
- 常见错误与解决方案
选择合适的数据类型是数据库设计的重要组成部分。通过正确选择数据类型,可以提高数据库的性能、减少存储空间的使用、确保数据的完整性,并为未来的扩展做好准备。在实际项目中,应根据具体的业务需求和数据特点,选择最适合的数据类型。
提示:在设计表结构时,应仔细考虑每个字段的数据类型,确保选择的类型能够满足当前需求,同时也能适应未来的变化。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
