MySQL参考手册

完整的MySQL语法、函数和配置参考

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语句用于定义和管理数据库对象,如数据库、表、索引和视图。

CREATE DATABASE
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE INDEX
DROP INDEX
CREATE VIEW
DROP VIEW

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语句用于操作表中的数据,包括插入、更新、删除和查询数据。

SELECT
INSERT
UPDATE
DELETE
REPLACE

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语句用于控制数据库访问权限,包括用户管理和权限授予/撤销。

GRANT
REVOKE
CREATE USER
DROP USER
ALTER USER

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';

事务控制

事务控制语句用于管理数据库事务,确保数据的一致性和完整性。

START TRANSACTION
COMMIT
ROLLBACK
SAVEPOINT
SET AUTOCOMMIT

事务控制示例

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或更高版本进行学习,以获得最新的功能和性能改进。生产环境升级前请务必进行全面测试。