以下是 MySQL 基础 SQL 语法的全面整理,涵盖核心操作和实际示例:
一、数据库操作
1. 创建数据库
CREATE DATABASE 数据库名;
-- 示例
CREATE DATABASE shop;
2. 删除数据库
DROP DATABASE 数据库名;
-- 示例
DROP DATABASE shop;
3. 切换数据库
USE 数据库名;
-- 示例
USE shop;
4. 查看所有数据库
SHOW DATABASES;
二、表操作(DDL)
1. 创建表
CREATE TABLE 表名 (
列名1 数据类型 [约束],
列名2 数据类型 [约束],
...
);
示例:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增
name VARCHAR(50) NOT NULL, -- 非空
age INT CHECK (age >= 0), -- 年龄非负
email VARCHAR(100) UNIQUE -- 唯一约束
);
2. 修改表结构
操作 | 语法 | 示例 |
---|---|---|
新增列 | ALTER TABLE 表名 ADD 列名 数据类型; | ALTER TABLE users ADD phone VARCHAR(20); |
删除列 | ALTER TABLE 表名 DROP COLUMN 列名; | ALTER TABLE users DROP COLUMN age; |
修改列类型 | ALTER TABLE 表名 MODIFY 列名 新数据类型; | ALTER TABLE users MODIFY name VARCHAR(100); |
重命名列 | ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型; | ALTER TABLE users CHANGE email user_email VARCHAR(150); |
重命名表 | RENAME TABLE 旧表名 TO 新表名; | RENAME TABLE users TO user_info; |
3. 删除表
DROP TABLE 表名;
-- 示例
DROP TABLE users;
三、数据操作(DML)
1. 插入数据
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
示例:
-- 插入单条数据
INSERT INTO users (name, age, email)
VALUES ('Alice', 25, 'alice@example.com');
-- 插入多条数据(批量插入)
INSERT INTO users (name, age, email)
VALUES
('Bob', 30, 'bob@example.com'),
('Charlie', 28, 'charlie@example.com');
2. 更新数据
UPDATE 表名 SET 列1=新值1, 列2=新值2 WHERE 条件;
示例:
-- 更新单个字段
UPDATE users SET age = 26 WHERE name = 'Alice';
-- 批量更新(年龄加1)
UPDATE users SET age = age + 1 WHERE age < 30;
3. 删除数据
DELETE FROM 表名 WHERE 条件;
示例:
-- 删除特定记录
DELETE FROM users WHERE age > 30;
-- 清空表(不可回滚,速度快)
TRUNCATE TABLE users;
四、数据查询(DQL)
1. 基础查询
SELECT 列1, 列2 FROM 表名 [WHERE 条件] [ORDER BY 列名] [LIMIT 数量];
示例:
-- 查询所有用户
SELECT * FROM users;
-- 查询指定列(姓名和年龄)
SELECT name, age FROM users;
-- 条件查询(年龄大于25)
SELECT * FROM users WHERE age > 25;
-- 模糊查询(邮箱以 "@example.com" 结尾)
SELECT * FROM users WHERE email LIKE '%@example.com';
-- 去重查询
SELECT DISTINCT age FROM users;
2. 排序与分页
-- 按年龄降序排序
SELECT * FROM users ORDER BY age DESC;
-- 分页查询(每页5条,第2页)
SELECT * FROM users LIMIT 5 OFFSET 5; -- 等价于 LIMIT 5,5
3. 聚合函数
函数 | 说明 | 示例 |
---|---|---|
COUNT() | 统计行数 | SELECT COUNT(*) FROM users; |
SUM() | 求和 | SELECT SUM(age) FROM users; |
AVG() | 平均值 | SELECT AVG(age) FROM users; |
MAX() /MIN() | 最大值/最小值 | SELECT MAX(age) FROM users; |
4. 分组查询
SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名 [HAVING 条件];
示例:
-- 按年龄分组统计人数
SELECT age, COUNT(*) AS total
FROM users
GROUP BY age;
-- 筛选人数大于1的分组
SELECT age, COUNT(*) AS total
FROM users
GROUP BY age
HAVING total > 1;
5. 连接查询
-- 内连接(查询用户及其订单)
SELECT u.name, o.order_id
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- 左连接(所有用户及其订单,无订单则为NULL)
SELECT u.name, o.order_id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
-- 自连接(查询同一部门的员工)
SELECT e1.name, e2.name
FROM employees e1
JOIN employees e2 ON e1.dept = e2.dept
WHERE e1.id != e2.id;
五、约束与索引
1. 常用约束
约束 | 说明 | 示例 |
---|---|---|
PRIMARY KEY | 主键(唯一且非空) | id INT PRIMARY KEY |
FOREIGN KEY | 外键 | FOREIGN KEY (user_id) REFERENCES users(id) |
UNIQUE | 唯一值 | email VARCHAR(100) UNIQUE |
NOT NULL | 非空 | name VARCHAR(50) NOT NULL |
CHECK | 自定义条件 | age INT CHECK (age >= 0) |
2. 创建索引
CREATE INDEX 索引名 ON 表名 (列名);
-- 示例
CREATE INDEX idx_email ON users (email);
六、事务控制
-- 开启事务
START TRANSACTION;
-- 执行操作(如插入订单)
INSERT INTO orders (order_id, user_id, amount)
VALUES (1001, 1, 99.99);
-- 提交事务(确认操作)
COMMIT;
-- 回滚事务(撤销操作)
ROLLBACK;
七、用户与权限(DCL)
1. 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
-- 示例
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'password123';
2. 授权与撤销权限
-- 授权(允许查询和插入)
GRANT SELECT, INSERT ON shop.* TO 'dev'@'localhost';
-- 撤销权限
REVOKE INSERT ON shop.* FROM 'dev'@'localhost';
八、总结
• DDL:定义数据库和表结构(CREATE
, ALTER
, DROP
)。
• DML:操作数据(INSERT
, UPDATE
, DELETE
)。
• DQL:查询数据(SELECT
+ 条件/排序/分组/连接)。
• DCL:用户权限管理(GRANT
, REVOKE
)。