MySQL 语法是操作 MySQL 数据库的基础,涵盖数据查询、插入、更新、删除、表结构管理等核心操作。以下是 MySQL 常用语法的系统梳理,按功能分类讲解,附带示例便于理解:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET 字符集] [COLLATE 排序规则];
-
IF NOT EXISTS:避免数据库已存在时报错;
-
常用字符集:
utf8mb4(支持 emoji)、utf8。
示例:创建 test_db 数据库,使用 utf8mb4 字符集:
CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SHOW DATABASES;
SELECT DATABASE();
DROP DATABASE [IF EXISTS] 数据库名;
CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 数据类型 [约束条件],
字段2 数据类型 [约束条件],
...
[PRIMARY KEY (主键字段)],
[KEY 索引名 (索引字段)]
) [ENGINE=存储引擎] [CHARACTER SET 字符集];
-
常用数据类型:
INT(整数)、VARCHAR(长度)(字符串)、DATETIME(日期时间)、DECIMAL(总长度, 小数位)(浮点数);
-
常用约束:
NOT NULL(非空)、PRIMARY KEY(主键)、FOREIGN KEY(外键)、UNIQUE(唯一)、DEFAULT(默认值)。
示例:创建 user 表:
CREATE TABLE IF NOT EXISTS user (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 0,
phone VARCHAR(20) UNIQUE,
create_time DATETIME DEFAULT NOW()
) ENGINE=InnoDB CHARACTER SET utf8mb4;
DESCRIBE 表名;
SHOW CREATE TABLE 表名;
ALTER TABLE 表名 ADD 新字段 数据类型 [约束];
ALTER TABLE 表名 MODIFY 字段名 新数据类型 [新约束];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [约束];
ALTER TABLE 表名 DROP 字段名;
ALTER TABLE 旧表名 RENAME TO 新表名;
示例:给 user 表添加 email 字段:
ALTER TABLE user ADD email VARCHAR(100) UNIQUE;
DROP TABLE [IF EXISTS] 表名;
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);
INSERT INTO 表名 (字段1, 字段2, ...)
VALUES
(值1, 值2, ...),
(值3, 值4, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...);
示例:插入用户数据:
INSERT INTO user (name, age, phone)
VALUES
('张三', 25, '13800138000'),
('李四', 30, '13900139000');
SELECT 字段1, 字段2, ...
FROM 表名
[WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件]
[ORDER BY 排序字段 [ASC|DESC]]
[LIMIT 起始位置, 条数];
示例:查询年龄大于 25 的用户,按年龄降序:
SELECT id, name, age
FROM user
WHERE age > 25
ORDER BY age DESC;
UPDATE 表名
SET 字段1 = 值1, 字段2 = 值2, ...
[WHERE 条件];
示例:将 id=1 的用户年龄改为 26:
UPDATE user SET age = 26 WHERE id = 1;
DELETE FROM 表名
[WHERE 条件];
示例:删除手机号为 13800138000 的用户:
DELETE FROM user WHERE phone = '13800138000';
CREATE INDEX 索引名 ON 表名(字段名);
CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
CREATE INDEX 索引名 ON 表名(字段1, 字段2);
示例:给 user 表的 phone 字段创建唯一索引:
CREATE UNIQUE INDEX idx_user_phone ON user(phone);
常用运算符:
-
比较:
=(等于)、!=/<>(不等于)、>、<、>=、<=;
-
范围:
BETWEEN ... AND ...(在范围内)、IN (值1, 值2)(在列表中);
-
模糊匹配:
LIKE(% 匹配任意字符,_ 匹配单个字符);
-
逻辑:
AND(且)、OR(或)、NOT(非);
-
空值:
IS NULL(为空)、IS NOT NULL(不为空)。
示例:
SELECT * FROM user
WHERE age BETWEEN 20 AND 30
AND name LIKE '%张%';
用于关联多表查询:
SELECT 字段 FROM 表1 INNER JOIN 表2 ON 表1.字段 = 表2.字段;
SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;
SELECT 字段 FROM 表1 RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;
示例:关联 user 表和 order 表查询用户的订单:
SELECT u.name, o.id AS order_id
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id;
-
CONCAT(str1, str2):拼接字符串;
-
LENGTH(str):获取字符串长度;
-
UPPER(str)/LOWER(str):转大小写。
-
SUM(字段):求和;
-
AVG(字段):平均值;
-
MAX(字段)/MIN(字段):最大 / 最小值;
-
COUNT(字段):计数(COUNT(*) 统计所有行)。
-
NOW():当前日期时间;
-
CURDATE():当前日期;
-
DATEDIFF(date1, date2):两个日期相差天数。
示例:统计每个用户的订单总数:
SELECT u.id, u.name, COUNT(o.id) AS order_count
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id
GROUP BY u.id, u.name;
-
关键字不区分大小写(推荐大写,增强可读性);
-
语句以分号(
;)结束;
-
表名 / 字段名若为关键字,需用反引号(
)包裹(如 order、desc`);
-
字符串值需用单引号(
')包裹(如 '张三')。
掌握以上基础语法,可完成 MySQL 大部分日常操作,复杂场景(如存储过程、事务)可在此基础上进一步学习。