一、DDL、DML、DQL、DCL介绍
| 分类 | 全称 | 中文含义 | 核心作用 | 类比(生活场景) |
|---|---|---|---|---|
| DDL | Data Definition Language | 数据定义语言 | 定义 / 修改数据库、表的结构 | 装修房子(拆墙、砌墙、改格局) |
| DML | Data Manipulation Language | 数据操纵语言 | 增删改表中的数据 | 往柜子里放 / 拿 / 改东西 |
| DQL | Data Query Language | 数据查询语言 | 从表中查询数据 | 从柜子里找东西 |
| DCL | Data Control Language | 数据控制语言 | 管理数据库的权限、事务 | 给家人分配房间钥匙 / 锁门 |
二、主要区别
- DDL 管结构:CREATE/ALTER/DROP,操作数据库 / 表的「骨架」,执行后不可回滚;
- DML 管数据:INSERT/UPDATE/DELETE,操作表中的「内容」,可通过事务回滚;
- DQL 查数据:SELECT 是核心,只读不写,新手最常接触;
- DCL 管权限:GRANT/REVOKE,主要用于用户和权限管理,多由 DBA 操作。
三、逐类详解
1. DDL(数据定义语言)
核心:操作「数据库 / 表的结构」,而非数据本身,比如创建表、删除库、修改字段类型。
- 常用关键字:
CREATE(创建)、ALTER(修改)、DROP(删除)、TRUNCATE(清空表结构 + 数据) - 特点:执行后会自动提交,无法用
ROLLBACK回滚(除非数据库配置特殊)。
实战例子(MySQL 环境):
-- 1. 创建数据库
CREATE DATABASE IF NOT EXISTS test_db; -- 避免重复创建报错
-- 2. 使用该数据库
USE test_db;
-- 3. 创建表(核心DDL操作)
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增
name VARCHAR(50) NOT NULL, -- 姓名,非空
age INT DEFAULT 18, -- 年龄,默认18
create_time DATETIME DEFAULT NOW() -- 创建时间,默认当前时间
);
-- 4. 修改表结构(添加字段)
ALTER TABLE user ADD COLUMN phone VARCHAR(11) AFTER name;
-- 5. 修改字段类型(把age的INT改成TINYINT)
ALTER TABLE user MODIFY COLUMN age TINYINT DEFAULT 18;
-- 6. 删除表
DROP TABLE IF EXISTS user;
-- 7. 清空表(删除所有数据,重置自增,属于DDL)
TRUNCATE TABLE user;
2. DML(数据操纵语言)
核心:操作「表中的数据」,比如新增一条用户记录、修改年龄、删除无效数据。
- 常用关键字:
INSERT(新增)、UPDATE(修改)、DELETE(删除) - 特点:执行后默认不会自动提交(需手动
COMMIT),未提交前可ROLLBACK回滚。
实战例子:
-- 先确保有user表(参考上面DDL的CREATE TABLE)
USE test_db;
-- 1. 新增数据(INSERT)
INSERT INTO user (name, phone, age)
VALUES ('张三', '13800138000', 25), -- 批量插入多条
('李四', '13900139000', 30);
-- 2. 修改数据(UPDATE,务必加WHERE,否则改全表!)
UPDATE user SET age = 26 WHERE name = '张三';
-- 3. 删除数据(DELETE,务必加WHERE!)
DELETE FROM user WHERE name = '李四';
-- 4. 提交/回滚(事务控制)
COMMIT; -- 确认修改
-- ROLLBACK; -- 撤销修改
3. DQL(数据查询语言)
核心:从表中「查询 / 检索数据」,是日常使用频率最高的 SQL,也是最灵活的。
- 唯一核心关键字:
SELECT(搭配FROM/WHERE/GROUP BY/ORDER BY等) - 特点:只查询数据,不修改任何内容,无副作用。
实战例子:
USE test_db;
-- 1. 查询所有字段(* 不推荐,生产环境指定字段)
SELECT * FROM user;
-- 2. 查询指定字段+条件
SELECT name, age FROM user WHERE age > 20;
-- 3. 排序+限制条数
SELECT name, phone FROM user ORDER BY age DESC LIMIT 10;
-- 4. 分组+聚合(统计各年龄段人数)
SELECT age, COUNT(*) AS user_count FROM user GROUP BY age;
4. DCL(数据控制语言)
核心:管理数据库的「权限 / 事务」,主要由 DBA(数据库管理员)使用,新手接触较少。
- 常用关键字:
GRANT(授权)、REVOKE(撤销权限)、COMMIT(提交事务)、ROLLBACK(回滚)、CREATE USER(创建用户) - 特点:针对「用户 / 权限」操作,而非数据 / 表结构。
实战例子:
-- 1. 创建数据库用户
CREATE USER 'test_user'@'%' IDENTIFIED BY '123456'; -- % 允许远程访问
-- 2. 授权(给test_user授予test_db所有表的增删改查权限)
GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'test_user'@'%';
-- 3. 刷新权限(生效授权)
FLUSH PRIVILEGES;
-- 4. 撤销权限
REVOKE DELETE ON test_db.* FROM 'test_user'@'%';
-- 5. 删除用户
DROP USER 'test_user'@'%';