MySQL参考手册简介
本参考手册提供了MySQL数据库系统的完整语法、函数和配置参数参考。无论您是初学者还是经验丰富的开发人员,都可以在这里找到所需的MySQL相关信息。
手册使用说明
- 使用顶部的搜索框快速查找特定关键字、函数或语法
- 通过快速导航链接跳转到特定章节
- 每个语法示例都包含实际使用场景和说明
- 表格内容按照功能分类,便于查阅
数据类型参考
MySQL支持多种数据类型,包括数值、字符串、日期时间和空间数据类型。选择正确的数据类型对于数据库性能和存储效率至关重要。
数值类型
MySQL数值类型分为整数类型和浮点数类型。整数类型可以有符号或无符号,浮点数类型包括单精度和双精度。
| 类型 | 描述 | 范围/示例 | 存储需求 |
|---|---|---|---|
| TINYINT | 小整数 | -128 到 127(有符号) 0 到 255(无符号) |
1字节 |
| SMALLINT | 小整数 | -32768 到 32767(有符号) 0 到 65535(无符号) |
2字节 |
| MEDIUMINT | 中等整数 | -8388608 到 8388607(有符号) 0 到 16777215(无符号) |
3字节 |
| INT/INTEGER | 标准整数 | -2147483648 到 2147483647(有符号) 0 到 4294967295(无符号) |
4字节 |
| BIGINT | 大整数 | -2^63 到 2^63-1(有符号) 0 到 2^64-1(无符号) |
8字节 |
| DECIMAL(p,s) | 精确小数 | DECIMAL(10,2) - 最大10位,2位小数 | 变长 |
| FLOAT | 单精度浮点数 | 约7位精度 | 4字节 |
| DOUBLE | 双精度浮点数 | 约15位精度 | 8字节 |
字符串类型
字符串类型用于存储文本数据,包括固定长度和可变长度字符串,以及文本和二进制大对象。
| 类型 | 描述 | 最大长度 | 存储特点 |
|---|---|---|---|
| CHAR(n) | 固定长度字符串 | 255字符 | 固定长度,不足补空格 |
| VARCHAR(n) | 可变长度字符串 | 65535字符 | 可变长度,只存储实际数据 |
| TINYTEXT | 短文本 | 255字符 | 最大255字符 |
| TEXT | 长文本 | 65535字符 | 最大64KB |
| MEDIUMTEXT | 中等长度文本 | 16777215字符 | 最大16MB |
| LONGTEXT | 超长文本 | 4GB | 最大4GB |
| BINARY(n) | 固定长度二进制 | 255字节 | 类似CHAR,但存储二进制数据 |
| VARBINARY(n) | 可变长度二进制 | 65535字节 | 类似VARCHAR,但存储二进制数据 |
| BLOB | 二进制大对象 | 65535字节 | 最大64KB |
| MEDIUMBLOB | 中等二进制对象 | 16MB | 最大16MB |
| LONGBLOB | 超长二进制数据 | 4GB | 最大4GB |
日期时间类型
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 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 |
| TIMESTAMP | 时间戳 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 到 2038-01-19 03:14:07 |
| YEAR | 年份 | YYYY | 1901 到 2155 |
枚举和集合类型
SQL示例
-- 枚举类型:只能选择预定义值之一
CREATE TABLE users (
id INT,
name VARCHAR(50),
status ENUM('active', 'inactive', 'pending')
);
-- 集合类型:可以选择多个预定义值
CREATE TABLE products (
id INT,
name VARCHAR(50),
tags SET('sale', 'new', 'featured', 'limited')
);
SQL语法参考
MySQL支持标准SQL语法,并提供了许多扩展功能。以下是常用的SQL语句分类和示例。
数据定义语言 (DDL)
DDL语句用于定义和管理数据库对象,如数据库、表、索引和视图。
DDL语句示例
SQL示例
-- 创建数据库
CREATE DATABASE company;
-- 创建表
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
department VARCHAR(50),
salary DECIMAL(10,2),
hire_date DATE
);
-- 修改表结构
ALTER TABLE employees
ADD COLUMN email VARCHAR(100);
数据操作语言 (DML)
DML语句用于操作表中的数据,包括插入、更新、删除和查询数据。
DML语句示例
SQL示例
-- 插入数据
INSERT INTO employees (name, department, salary, hire_date)
VALUES ('张三', '技术部', 8000.00, '2023-01-15');
-- 更新数据
UPDATE employees
SET salary = salary * 1.1
WHERE department = '技术部';
-- 删除数据
DELETE FROM employees
WHERE id = 5;
数据控制语言 (DCL)
DCL语句用于控制数据库访问权限,包括用户管理和权限授予/撤销。
DCL语句示例
SQL示例
-- 创建用户
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'password123';
-- 授予权限
GRANT SELECT, INSERT, UPDATE ON company.* TO 'app_user'@'localhost';
-- 撤销权限
REVOKE UPDATE ON company.* FROM 'app_user'@'localhost';
事务控制
事务控制语句用于管理数据库事务,确保数据的一致性和完整性。
事务控制示例
SQL示例
-- 开始事务
START TRANSACTION;
-- 执行多个操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 提交事务
COMMIT;
函数参考
MySQL提供了丰富的内置函数,用于处理数据、执行计算和转换数据类型。
字符串函数
字符串函数用于处理和操作文本数据。
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
| CONCAT() | 连接字符串 | CONCAT('Hello', ' ', 'World') | Hello World |
| SUBSTRING() | 提取子字符串 | SUBSTRING('MySQL', 1, 2) | My |
| LENGTH() | 字符串长度 | LENGTH('text') | 4 |
| UPPER() / LOWER() | 大小写转换 | UPPER('hello') | HELLO |
| TRIM() | 去除空格 | TRIM(' text ') | text |
| REPLACE() | 字符串替换 | REPLACE('ABC', 'B', 'X') | AXC |
| INSTR() | 查找子串位置 | INSTR('MySQL', 'SQL') | 3 |
| LEFT() / RIGHT() | 提取左/右部分 | LEFT('MySQL', 2) | My |
数值函数
数值函数用于执行数学计算和数值处理。
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
| ABS() | 绝对值 | ABS(-10) | 10 |
| ROUND() | 四舍五入 | ROUND(123.456, 2) | 123.46 |
| CEIL() / FLOOR() | 向上/向下取整 | CEIL(123.45) | 124 |
| RAND() | 随机数 | RAND() | 0.1234... |
| POW() | 幂运算 | POW(2, 3) | 8 |
| SQRT() | 平方根 | SQRT(16) | 4 |
| MOD() | 取模运算 | MOD(10, 3) | 1 |
| SIGN() | 符号函数 | SIGN(-5) | -1 |
日期时间函数
日期时间函数用于处理日期和时间值。
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
| NOW() | 当前日期时间 | NOW() | 2024-01-15 10:30:00 |
| CURDATE() | 当前日期 | CURDATE() | 2024-01-15 |
| CURTIME() | 当前时间 | CURTIME() | 10:30:00 |
| DATE() | 提取日期部分 | DATE('2024-01-15 10:30:00') | 2024-01-15 |
| YEAR() / MONTH() / DAY() | 提取年/月/日 | YEAR('2024-01-15') | 2024 |
| DATEDIFF() | 日期差 | DATEDIFF('2024-01-20', '2024-01-15') | 5 |
| DATE_ADD() | 日期加法 | DATE_ADD('2024-01-15', INTERVAL 7 DAY) | 2024-01-22 |
| DATE_FORMAT() | 日期格式化 | DATE_FORMAT(NOW(), '%Y-%m-%d') | 2024-01-15 |
聚合函数
聚合函数用于对一组值执行计算并返回单个值。
| 函数 | 描述 | 示例 | 结果 |
|---|---|---|---|
| COUNT() | 计数 | COUNT(*) | 记录总数 |
| SUM() | 求和 | SUM(salary) | 工资总和 |
| AVG() | 平均值 | AVG(salary) | 平均工资 |
| MAX() / MIN() | 最大/最小值 | MAX(salary) | 最高工资 |
| GROUP_CONCAT() | 分组连接 | GROUP_CONCAT(name) | 所有名字连接成字符串 |
| STDDEV() | 标准差 | STDDEV(salary) | 工资标准差 |
| VARIANCE() | 方差 | VARIANCE(salary) | 工资方差 |
条件函数
条件函数用于根据条件返回不同的值。
SQL示例
-- IF函数
SELECT name, salary,
IF(salary > 5000, '高薪', '普通') AS salary_level
FROM employees;
-- CASE语句
SELECT name, salary,
CASE
WHEN salary > 10000 THEN '高薪'
WHEN salary > 5000 THEN '中等'
ELSE '一般'
END AS salary_level
FROM employees;
-- COALESCE函数(返回第一个非NULL值)
SELECT name, COALESCE(phone, email, '无联系方式') AS contact
FROM employees;
运算符参考
MySQL支持多种运算符,用于执行算术、比较、逻辑和位运算。
比较运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
| = | 等于 | age = 25 | TRUE(如果age为25) |
| <> 或 != | 不等于 | age <> 25 | TRUE(如果age不为25) |
| > | 大于 | salary > 5000 | TRUE(如果salary大于5000) |
| < | 小于 | salary < 5000 | TRUE(如果salary小于5000) |
| >= | 大于等于 | age >= 18 | TRUE(如果age大于等于18) |
| <= | 小于等于 | age <= 65 | TRUE(如果age小于等于65) |
| BETWEEN | 在范围内 | age BETWEEN 18 AND 65 | TRUE(如果age在18到65之间) |
| IN | 在列表中 | dept IN ('IT', 'HR') | TRUE(如果dept是IT或HR) |
| LIKE | 模式匹配 | name LIKE 'J%' | TRUE(如果name以J开头) |
| IS NULL | 为空 | email IS NULL | TRUE(如果email为NULL) |
逻辑运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
| AND | 逻辑与 | age > 18 AND status = 'active' | TRUE(两个条件都为TRUE) |
| OR | 逻辑或 | dept = 'IT' OR dept = 'HR' | TRUE(至少一个条件为TRUE) |
| NOT | 逻辑非 | NOT deleted | TRUE(如果deleted为FALSE) |
| XOR | 逻辑异或 | condition1 XOR condition2 | TRUE(两个条件不同时为TRUE) |
算术运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
| + | 加法 | 5 + 3 | 8 |
| - | 减法 | 5 - 3 | 2 |
| * | 乘法 | 5 * 3 | 15 |
| / | 除法 | 5 / 2 | 2.5 |
| DIV | 整数除法 | 5 DIV 2 | 2 |
| % 或 MOD | 取模 | 5 % 2 | 1 |
常用配置参数
MySQL的配置参数存储在my.cnf(Linux)或my.ini(Windows)配置文件中,用于调整数据库性能和功能。
连接相关
| 参数 | 描述 | 默认值 | 建议值 |
|---|---|---|---|
| max_connections | 最大连接数 | 151 | 根据应用需求调整 |
| connect_timeout | 连接超时时间(秒) | 10 | 10-30 |
| wait_timeout | 非交互连接超时时间(秒) | 28800 | 600-1800 |
| interactive_timeout | 交互连接超时时间(秒) | 28800 | 600-1800 |
| max_allowed_packet | 最大数据包大小 | 4MB | 16-64MB |
InnoDB相关
| 参数 | 描述 | 默认值 | 建议值 |
|---|---|---|---|
| innodb_buffer_pool_size | 缓冲池大小 | 128MB | 物理内存的50-80% |
| innodb_log_file_size | 重做日志文件大小 | 48MB | 1-4GB |
| innodb_flush_log_at_trx_commit | 日志刷新方式 | 1 | 1(最安全)或 2 |
| innodb_file_per_table | 每个表独立表空间 | ON | ON |
| innodb_lock_wait_timeout | 锁等待超时时间(秒) | 50 | 50-120 |
查询缓存相关
| 参数 | 描述 | 默认值 | 建议值 |
|---|---|---|---|
| query_cache_type | 查询缓存类型 | OFF | 0(OFF)/1(ON)/2(DEMAND) |
| query_cache_size | 查询缓存大小 | 1MB | 16-64MB |
| query_cache_limit | 单个查询结果最大缓存大小 | 1MB | 1-4MB |
系统变量
系统变量用于配置MySQL服务器的操作。分为全局变量和会话变量。
查看系统变量
SQL示例
-- 查看所有系统变量
SHOW VARIABLES;
-- 查看特定变量
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- 查看全局变量
SHOW GLOBAL VARIABLES;
-- 查看会话变量
SHOW SESSION VARIABLES;
-- 使用SELECT查看变量值
SELECT @@global.innodb_buffer_pool_size;
SELECT @@session.autocommit;
设置系统变量
SQL示例
-- 设置会话变量(当前连接有效)
SET sort_buffer_size = 256000;
SET SESSION sort_buffer_size = 256000;
-- 设置全局变量(所有新连接有效)
SET GLOBAL max_connections = 200;
SET @@global.max_connections = 200;
-- 永久设置(需要修改配置文件)
# my.cnf
[mysqld]
max_connections = 200
innodb_buffer_pool_size = 1G
query_cache_size = 64M
常用系统变量
| 变量名 | 作用域 | 描述 |
|---|---|---|
| autocommit | 全局/会话 | 是否自动提交事务 |
| character_set_server | 全局 | 服务器默认字符集 |
| max_connections | 全局 | 最大客户端连接数 |
| sql_mode | 全局/会话 | SQL模式设置 |
| time_zone | 全局/会话 | 时区设置 |
| transaction_isolation | 全局/会话 | 事务隔离级别 |
参考手册使用提示:本参考手册提供了MySQL常用语法和函数的快速参考。对于更详细的信息,请参考MySQL官方文档。建议定期查看MySQL官方文档以获取最新功能和变更信息。
版本兼容性
MySQL各版本特性
| 特性 | MySQL 5.7 | MySQL 8.0 | 说明 |
|---|---|---|---|
| 窗口函数 | 不支持 | 支持 | MySQL 8.0支持窗口函数如ROW_NUMBER() |
| CTE(公共表表达式) | 不支持 | 支持 | MySQL 8.0支持WITH语句 |
| 角色管理 | 不支持 | 支持 | MySQL 8.0引入角色管理功能 |
| JSON函数 | 部分支持 | 完整支持 | MySQL 8.0增强了JSON功能 |
| 查询缓存 | 支持 | 已移除 | MySQL 8.0移除了查询缓存 |
| 默认字符集 | latin1 | utf8mb4 | MySQL 8.0默认使用utf8mb4 |
| 数据字典 | 不支持 | 支持 | MySQL 8.0引入事务性数据字典 |
版本迁移注意事项
- 从MySQL 5.7升级到8.0前,请先检查兼容性问题
- 注意字符集和排序规则的默认值变化
- 验证应用程序是否使用了已弃用或移除的功能
- 测试存储过程、触发器和视图的兼容性
- 考虑使用MySQL升级检查工具进行预检查
学习建议:建议使用MySQL 8.0或更高版本进行学习,以获得最新的功能和性能改进。生产环境升级前请务必进行全面测试。