当前位置: 首页 > news >正文

深入解析: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。

示例:

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)

示例:

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:适合存储二进制数据,如图片、文件。

示例:

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

示例:

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 等

示例:

CREATE TABLE person (
gender ENUM('male', 'female'),
hobbies SET('reading', 'sports', 'music')
);

二、MySQL 运算符

MySQL 提供丰富的运算符,用于数据查询和处理。

1. 算术运算符

+ 加法

- 减法

* 乘法

/ 除法(自然除)

DIV 整除(只取整数部分)

% 或 MOD(a,b) 取余数

示例:

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 正则匹配

示例:

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 异或

示例:

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. 位运算符

| 按位或

& 按位与

^ 按位异或

~ 按位取反

<< 左移

>> 右移

示例:

SELECT 5 & 3 AS bit_and, 5 | 3 AS bit_or, 5 ^ 3 AS bit_xor, ~5 AS bit_not, 5 > 1 AS right_shift;

5. 运算符优先级

优先级高的先执行

同级运算符从左到右依次执行

可使用 () 强制指定优先级

示例:

SELECT 2+3*4 AS without_parenthesis, (2+3)*4 AS with_parenthesis;

三、存储引擎简介

MySQL 采用 插件式存储引擎,不同引擎在性能、事务、索引支持等方面存在差异。

1. 查看支持的存储引擎

SHOW ENGINES;

2. 常见存储引擎

InnoDB(默认):支持事务、行锁、外键,适合高并发场景。

MyISAM:不支持事务,查询速度快,占用空间小。

Memory:数据存放在内存中,适合临时数据、高速查询。

CSV:以 .csv 格式存储,可直接导入导出,方便与 Excel 交互。

示例:

CREATE TABLE log (
id INT,
message VARCHAR(255)
) ENGINE=MyISAM;

3. 数据表文件说明

InnoDB:一个 .frm 文件(表结构)+ ibdata1 文件(数据、索引)。

MyISAM:三个文件:

.frm(表结构)

.MYD(数据文件)

.MYI(索引文件)

四、总结

数据类型选择:尽量精确匹配业务需求,数值型选取合适范围,货币类推荐 DECIMAL。

运算符使用:注意比较运算中的 NULL,避免浮点数精度误差。

存储引擎选择:事务场景用 InnoDB,读密集型可考虑 MyISAM,临时计算可用 Memory。

掌握这些基础知识,可以让 MySQL 使用更加高效与稳定。

http://www.wxhsa.cn/company.asp?id=2814

相关文章:

  • 【前端Vue】如何优雅地在vue中引入ace-editor编辑器 - 指南
  • USACO08 OPEN Roads Around the Farm S (递归)
  • JavaScript生成随机数的方法
  • LiveOS 的制作简介
  • .gitignore 文件
  • 目标检测 | 基于Weiler–Atherton算法的IoU求解
  • 对比Java学习Go——函数、集合和OOP
  • MySQL集群高可用架构 - 指南
  • 【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT专业的工具替代
  • 如何在Spring MVC中处理请求参数
  • redis实现缓存2-解决缓存穿透,缓存击穿
  • 单克隆抗体人源化:从鼠源缺陷到全人源突破,3 大阶段破解临床应用难题
  • 在Kubernetes中DaemonSet无法在master节点调度的问题
  • 9 12-
  • 桌面客户端的主要类型和技术方案
  • AGX Orin平台RTC驱动导致reboot系统卡住障碍调试
  • C 语言实现动态数组、链表、栈与队列
  • git reset
  • ICPC 2025 网络赛第一场 M
  • Brute It -TryHackMe
  • 题解:P12336 第三心脏
  • Spring篇知识点(1)
  • 在CentOS 7系统中彻底移除MongoDB数据库
  • 2025.9.13总结
  • 【数学建模】烟幕干扰弹投放策略优化:模型与算法整合框架 - 实践
  • 开源排名算法工具raink:利用LLM实现智能文档排序
  • lcjmSSL域名SSL证书免费申请
  • uniapp原生插件 TCP Socket 利用文档
  • 【PyQt5】实现输入延迟响应:3秒无输入后自动读取内容
  • 线性代数基础