MySQL 数据类型与运算符详解

本文将系统梳理 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 使用更加高效与稳定。

相关推荐
爱吃烤鸡翅的酸菜鱼3 小时前
【Redis】常用数据结构之Hash篇:从常用命令到使用场景详解
数据结构·数据库·redis·后端·缓存·哈希算法
李少兄3 小时前
IntelliJ IDEA 启动项目时配置端口指南
数据库·sql·intellij-idea
NineData3 小时前
NineData云原生智能数据管理平台新功能发布|2025年8月版
数据库·mongodb·云原生·数据库管理工具·ninedata·数据库迁移·数据复制
白云如幻3 小时前
【Java】QBC检索和本地SQL检索
java·数据库·sql
勘察加熊人4 小时前
python将pdf转txt,并切割ai
数据库·python·pdf
不良人天码星4 小时前
Redis单线程模型为什么快?
数据库·redis·缓存
RestCloud5 小时前
ETL 不只是数据搬运工:如何实现智能转换与清洗?
数据库·api
lu9up5 小时前
因表并行引发的血案【故障处理案例】
数据库·oracle·dba
qq_356408666 小时前
es通过分片迁移迁移解决磁盘不均匀问题
java·数据库·elasticsearch