本文将系统梳理 MySQL 数据类型、运算符 以及 存储引擎,帮助初学者更高效地使用 MySQL。
一、数据类型
MySQL 提供了多种数据类型,主要分为以下几类:
1. 整数类型
TINYINT(m):1字节,范围 -128 ~ 127
SMALLINT(m):2字节,范围 -32768 ~ 32767
MEDIUMINT(m):3字节,范围 -8388608 ~ 8388607
INT(m):4字节,范围 -2147483648 ~ 2147483647
BIGINT(m):8字节,范围 ±9.22×10^18
特殊属性:AUTO_INCREMENT
用于生成唯一标识符或顺序值。
只能应用于 整数类型,通常结合 PRIMARY KEY 或 UNIQUE KEY。
默认从 1 开始,每次递增 1。
示例:
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
注意:如果字段定义了 UNSIGNED,则最大值翻倍,且最小值为 0。
2. 小数类型
FLOAT:单精度浮点数,4字节,存储近似值。
DOUBLE:双精度浮点数,8字节,存储近似值。
DECIMAL(M,D):定点数,以字符串形式存储,适合需要高精度的场景(如货币)。
参数说明:
M:数字总位数(1~65,默认10)
D:小数点后的位数(0~30,且不能大于M,默认0)
示例:
sql
CREATE TABLE salary (
base DECIMAL(8,2)
);
INSERT INTO salary VALUES (12345.67), (999.99);
3. 字符串类型
CHAR(n):固定长度字符串(0~255)
VARCHAR(n):可变长度字符串(0~65535)
TEXT 系列:
TINYTEXT:最大 255 字符
TEXT:最大 65535 字符
MEDIUMTEXT:最大 2^24-1 字符
LONGTEXT:最大 2^32-1 字符
BLOB 系列(二进制大对象):
TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
区别:
CHAR:长度固定,未填满会用空格补齐。
VARCHAR:长度可变,按实际长度+1存储。
BLOB:适合存储二进制数据,如图片、文件。
示例:
sql
CREATE TABLE articles (
title VARCHAR(100),
content TEXT
);
4. 日期和时间类型
DATE:YYYY-MM-DD
DATETIME:YYYY-MM-DD HH:MM:SS
TIMESTAMP:时间戳,自动记录时间
TIME:HH:MM:SS
YEAR:YYYY
示例:
sql
CREATE TABLE events (
event_date DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO events (event_date) VALUES ('2025-09-12');
MySQL 允许多种日期格式输入,非法值会存储为 0000-00-00。
5. 其他数据类型
ENUM:枚举类型,最多 65535 个值(适合单选字段,如性别)。
SET:集合类型,最多 64 个元素(适合多选字段,如爱好)。
二进制类型:BINARY、VARBINARY
空间类型:Geometry、Point、Polygon 等
示例:
sql
CREATE TABLE person (
gender ENUM('male', 'female'),
hobbies SET('reading', 'sports', 'music')
);
二、MySQL 运算符
MySQL 提供丰富的运算符,用于数据查询和处理。
1. 算术运算符
- 加法
- 减法
* 乘法
/ 除法(自然除)
DIV 整除(只取整数部分)
% 或 MOD(a,b) 取余数
示例:
sql
SELECT 5+3 AS sum, 10-4 AS diff, 6*7 AS product, 15/4 AS division, 15 DIV 4 AS int_div, 15%4 AS mod;
2. 比较运算符
= 相等
<=> 安全相等(NULL 也可比较)
<> 或 != 不等
<、<=、>、>=
IS NULL、IS NOT NULL
IN (...)/NOT IN (... )
BETWEEN a AND b
LIKE 模糊匹配
REGEXP 正则匹配
示例:
sql
SELECT 2=2 AS eq, 3!=5 AS not_eq, 5 BETWEEN 1 AND 10 AS in_range, 'abc' LIKE 'a%' AS like_test;
3. 逻辑运算符
AND / &&
OR / ||
NOT / !
XOR 异或
示例:
sql
SELECT (1 AND 0) AS and_test, (1 OR 0) AS or_test, NOT 1 AS not_test, (1 XOR 0) AS xor_test;
4. 位运算符
| 按位或
& 按位与
^ 按位异或
~ 按位取反
<< 左移
>> 右移
示例:
sql
SELECT 5 & 3 AS bit_and, 5 | 3 AS bit_or, 5 ^ 3 AS bit_xor, ~5 AS bit_not, 5 << 1 AS left_shift, 5 >> 1 AS right_shift;
5. 运算符优先级
优先级高的先执行
同级运算符从左到右依次执行
可使用 () 强制指定优先级
示例:
sql
SELECT 2+3*4 AS without_parenthesis, (2+3)*4 AS with_parenthesis;
三、存储引擎简介
MySQL 采用 插件式存储引擎,不同引擎在性能、事务、索引支持等方面存在差异。
1. 查看支持的存储引擎
sql
SHOW ENGINES;
2. 常见存储引擎
InnoDB(默认):支持事务、行锁、外键,适合高并发场景。
MyISAM:不支持事务,查询速度快,占用空间小。
Memory:数据存放在内存中,适合临时数据、高速查询。
CSV:以 .csv 格式存储,可直接导入导出,方便与 Excel 交互。
示例:
sql
CREATE TABLE log (
id INT,
message VARCHAR(255)
) ENGINE=MyISAM;
3. 数据表文件说明
InnoDB:一个 .frm 文件(表结构)+ ibdata1 文件(数据、索引)。
MyISAM:三个文件:
.frm(表结构)
.MYD(数据文件)
.MYI(索引文件)
四、总结
数据类型选择:尽量精确匹配业务需求,数值型选取合适范围,货币类推荐 DECIMAL。
运算符使用:注意比较运算中的 NULL,避免浮点数精度误差。
存储引擎选择:事务场景用 InnoDB,读密集型可考虑 MyISAM,临时计算可用 Memory。
掌握这些基础知识,可以让 MySQL 使用更加高效与稳定。