MySQL基础SQL四大核心语言详解:DDL、DML、DQL、DCL

SQL 是操作 MySQL 的基础标准语言,库表结构、数据读写和权限管理都离不开 DDL、DML、DQL、DCL 四类语句。

SQL(结构化查询语言)是操作关系型数据库的核心标准语言,也是MySQL数据库学习的基础核心。所有MySQL数据库的库表创建、数据读写、权限管理等操作,均依托SQL语句实现。根据功能用途,SQL基础语句可划分为四大核心类别:DDL数据定义语言、DML数据操作语言、DQL数据查询语言、DCL数据控制语言

本文将从零起步,逐一拆解四大语言的核心语法、实操场景、使用规范及注意事项,搭配可直接运行的示例语句,帮助新手快速掌握MySQL基础操作,搭建扎实的数据库技术基础。同时遵循MySQL通用规范:SQL关键字不区分大小写,行业内默认大写关键字、小写自定义名称,提升代码可读性。

一、DDL 数据定义语言(结构定义)

DDL(Data Definition Language,数据定义语言)核心作用是定义和修改数据库对象结构,操作对象为数据库、数据表、字段、索引等结构性资源,不直接操作表内数据。核心指令包含 CREATE(创建)、ALTER(修改)、DROP(删除),是搭建数据库架构的基础语句。

1.1 CREATE:创建数据库/数据表

用于新建数据库、数据表、索引等数据库对象,是初始化数据库结构的核心指令。

(1)创建数据库

语法:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

示例:创建名为test_db的数据库,指定UTF-8编码

-- 创建数据库,避免重复创建报错
CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 切换使用目标数据库
USE test_db;

(2)创建数据表

创建表时需定义字段名、数据类型、约束条件、注释等核心属性,约束可保证数据完整性。

语法:CREATE TABLE [IF NOT EXISTS] 表名(字段1 数据类型 [约束] [COMMENT 注释], 字段2 数据类型 [约束] [COMMENT 注释], ...) [表注释];

示例:创建学生信息表student

CREATE TABLE IF NOT EXISTS student (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生主键ID',
    name VARCHAR(20) NOT NULL COMMENT '学生姓名',
    age TINYINT DEFAULT 0 COMMENT '学生年龄',
    gender CHAR(1) COMMENT '学生性别',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET utf8mb4 COMMENT '学生信息表';

1.2 ALTER:修改库/表结构

用于动态修改已存在的数据库、数据表结构,支持新增字段、删除字段、修改字段属性、修改表名、修改字符集等操作,是数据库迭代维护的常用指令。

(1)数据表字段操作

-- 新增字段:给学生表新增手机号字段
ALTER TABLE student ADD COLUMN phone VARCHAR(11) COMMENT '手机号';

-- 修改字段类型:将姓名字段长度修改为30
ALTER TABLE student MODIFY COLUMN name VARCHAR(30) NOT NULL COMMENT '学生姓名';

-- 重命名字段:将gender字段改为sex
ALTER TABLE student RENAME COLUMN gender TO sex;

-- 删除字段:删除手机号字段
ALTER TABLE student DROP COLUMN phone;

(2)修改表属性

-- 修改表名
ALTER TABLE student RENAME TO stu_info;

-- 修改数据表字符集
ALTER TABLE stu_info DEFAULT CHARSET utf8mb4;

1.3 DROP:删除库/表结构

用于彻底删除数据库、数据表等结构性对象,删除后结构及内部数据全部清空,不可恢复,生产环境需谨慎使用。

-- 删除数据表
DROP TABLE IF EXISTS stu_info;

-- 删除数据库
DROP DATABASE IF EXISTS test_db;

补充:IF EXISTS 关键字可避免因对象不存在导致的报错,是规范写法。

二、DML 数据操作语言(数据增删改)

DML(Data Manipulation Language,数据操作语言)核心作用是操作数据表中的具体数据,不修改表结构,仅对数据记录进行新增、修改、删除操作。核心指令包含 INSERT(新增)、UPDATE(修改)、DELETE(删除),是业务数据维护的核心语句。

2.1 INSERT:新增数据记录

用于向数据表中插入单条或多条数据,支持指定字段插入和全字段插入两种方式。

-- 单条插入(指定字段)
INSERT INTO student (name, age, sex) VALUES ('张三', 20, '男');

-- 多条批量插入(高效写法,适合批量导入数据)
INSERT INTO student (name, age, sex) 
VALUES 
('李四', 19, '女'),
('王五', 21, '男'),
('赵六', 20, '女');

2.2 UPDATE:修改数据记录

用于更新表中已有数据,必须搭配WHERE条件精准定位数据,否则会更新全表数据,引发数据事故。

-- 精准修改:修改ID为1的学生年龄
UPDATE student SET age = 22 WHERE id = 1;

-- 多字段修改:同时修改姓名和年龄
UPDATE student SET name = '张三三', age = 23 WHERE id = 1;

重要注意:生产环境执行UPDATE语句前,建议先用SELECT查询校验条件准确性,避免误改全表。

2.3 DELETE:删除数据记录

用于删除表中指定数据记录,同样依赖WHERE条件筛选数据,仅删除数据、保留表结构。

-- 精准删除:删除ID为4的学生数据
DELETE FROM student WHERE id = 4;

-- 清空表所有数据(保留表结构)
DELETE FROM student;

补充区分:DELETE清空数据可回滚、支持事务;TRUNCATE清空数据速度更快、不可回滚,属于DDL语句。

三、DQL 数据查询语言(数据查询)

DQL(Data Query Language,数据查询语言)是MySQL使用频率最高的语句,核心作用是按需查询数据表数据,仅读取数据、不修改任何库表结构和数据内容。核心指令为 SELECT,支持基础查询、条件查询、排序、分页、聚合查询等多种场景。

3.1 基础查询

-- 查询表中所有字段所有数据
SELECT * FROM student;

-- 查询指定字段数据
SELECT id, name, age FROM student;

-- 字段别名查询,优化展示效果
SELECT name AS 姓名, age AS 年龄, sex AS 性别 FROM student;

3.2 条件查询(WHERE)

通过条件筛选符合要求的数据,支持比较运算符、逻辑运算符、模糊查询等。

-- 查询年龄大于20岁的学生
SELECT * FROM student WHERE age > 20;

-- 查询性别为男且年龄等于20岁的学生
SELECT * FROM student WHERE sex = '男' AND age = 20;

-- 模糊查询:姓名包含“张”的学生
SELECT * FROM student WHERE name LIKE '%张%';

3.3 排序与分页

-- 按年龄降序排序(DESC降序,ASC升序,默认升序)
SELECT * FROM student ORDER BY age DESC;

-- 分页查询:每页2条数据,查询第1页(偏移量0,条数2)
SELECT * FROM student LIMIT 0, 2;

3.4 聚合查询与分组

配合聚合函数(COUNT、MAX、MIN、SUM、AVG)和GROUP BY实现统计查询。

-- 统计学生总人数
SELECT COUNT(*) AS 学生总人数 FROM student;

-- 按性别分组,统计每组人数
SELECT sex AS 性别, COUNT(*) AS 人数 FROM student GROUP BY sex;

四、DCL 数据控制语言(权限管理)

DCL(Data Control Language,数据控制语言)核心作用是管理数据库用户权限,用于分配、回收用户的数据库操作权限,保障数据库数据安全,是数据库运维、多用户协作的核心语句。核心指令包含 GRANT(授权)、REVOKE(撤权)

4.1 GRANT:授予用户权限

用于创建用户并分配对应操作权限,支持全局权限、单库权限、单表权限配置。

语法:GRANT 权限列表 ON 数据库.数据表 TO '用户名'@'访问地址' IDENTIFIED BY '密码';

-- 创建新用户test,密码123456,仅允许本地访问,拥有test_db库所有权限
GRANT ALL PRIVILEGES ON test_db.* TO 'test'@'localhost' IDENTIFIED BY '123456';

-- 授予用户远程查询、插入权限
GRANT SELECT, INSERT ON test_db.* TO 'test'@'%' IDENTIFIED BY '123456';

-- 刷新权限(权限修改后必须执行,生效配置)
FLUSH PRIVILEGES;

4.2 REVOKE:回收用户权限

用于撤销用户已拥有的数据库权限,不删除用户账号,仅回收对应操作权限。

语法:REVOKE 权限列表 ON 数据库.数据表 FROM '用户名'@'访问地址';

-- 回收test用户的插入权限
REVOKE INSERT ON test_db.* FROM 'test'@'localhost';

-- 回收test用户所有权限
REVOKE ALL PRIVILEGES ON test_db.* FROM 'test'@'localhost';

-- 刷新权限生效
FLUSH PRIVILEGES;

五、四大SQL语言核心总结

为方便快速记忆与实操,对四类核心SQL语言做核心汇总,明确核心用途与使用场景:

  • DDL 结构操作:管库、表、字段结构,CREATE建结构、ALTER改结构、DROP删结构,多用于项目初始化、架构迭代

  • DML 数据操作:管表内具体数据,INSERT增数据、UPDATE改数据、DELETE删数据,多用于日常业务数据维护

  • DQL 数据查询:仅读取数据,SELECT万能查询,支持筛选、排序、分页、统计,是开发使用最多的语句

  • DCL 权限控制:管用户访问权限,GRANT授权、REVOKE撤权,保障数据库访问安全,多用于运维管理

六、新手实操核心注意事项

1. 所有修改、删除类语句(DROP、UPDATE、DELETE)务必谨慎,生产环境禁止无条件执行,避免数据丢失或损坏;

2. 优先使用 IF EXISTS/IF NOT EXISTS 关键字,规避重复创建、删除不存在对象的报错;

3. 权限修改后必须执行 FLUSH PRIVILEGES 刷新权限,否则配置不生效;

4. 编码统一使用utf8mb4,兼容所有中文、特殊字符及表情,避免乱码问题;

5. 代码规范统一:关键字大写、自定义名称小写、合理添加注释,提升代码可读性与可维护性。

七、高频面试考点与易错点解析

本节汇总MySQL基础SQL最常考面试题、核心辨析、高频易错点,贴合后端开发、测试、运维面试场景,同时解答新手学习中最易困惑的问题,巩固知识点、适配备考求职需求。

7.1 四大SQL语言核心面试辨析

这是基础面试必考题,面试官常考察分类认知与场景区分,核心考点如下:

  • 考点1:语句分类区分:DDL操作数据库结构、DML操作业务数据、DQL只读查询数据、DCL操作用户权限,核心区分口诀:DDL管结构、DML管数据、DQL查数据、DCL管权限

  • 考点2:执行权限优先级:生产环境中,DCL权限管控优先级最高,普通业务开发账号仅授予DQL、DML权限,严禁开放DDL删除、全局权限,规避架构误改、数据泄露风险。

  • 考点3:语句执行特性:DDL语句默认自动提交事务、不可回滚;DML语句默认支持事务、可手动回滚,这是两类语句最核心的底层区别。

7.2 DELETE与TRUNCATE 高频面试对比

二者均可以清空表数据,是面试超高频考点,详细区别如下:

  • 语句归属不同:DELETE属于DML数据操作语言,TRUNCATE属于DDL数据定义语言。

  • 事务支持不同:DELETE支持事务,可以回滚;TRUNCATE不支持事务,执行后数据彻底不可恢复

  • 自增主键重置不同:DELETE清空表数据后,自增主键会延续之前数值;TRUNCATE清空后,自增主键重置从1开始。

  • 执行效率不同:TRUNCATE直接销毁重建表结构,速度极快;DELETE逐行删除数据,大数据量表执行效率极低。

  • 使用场景:精准删数据用DELETE;测试环境清空全表、重置表数据用TRUNCATE,生产环境禁止使用TRUNCATE

7.3 UPDATE/DELETE 高危操作面试重点

面试中常考察生产环境规范,是企业重点考察的安全实操考点:

  • 核心禁忌:禁止执行无WHERE条件的UPDATE、DELETE语句,会直接更新/清空全表数据,造成生产事故。

  • 标准操作流程:先使用SELECT语句校验筛选条件准确性,确认数据无误后,再执行UPDATE/DELETE修改删除数据。

  • 企业防护手段:多数企业生产数据库会开启SQL审计、禁止无条件DML语句执行,同时限制普通账号的DROP、TRUNCATE权限。

7.4 DCL权限核心面试题

  • 考点1:@'%' 和 @'localhost' 区别:@'localhost' 仅允许本机服务器访问数据库;@'%' 允许所有远程IP访问,远程连接场景必备配置。

  • 考点2:FLUSH PRIVILEGES 作用:手动刷新权限缓存,GRANT、REVOKE修改权限后必须执行,否则新权限配置不生效。

  • 考点3:ALL PRIVILEGES 权限风险:该权限为超级权限,包含所有库表操作权限,生产环境仅管理员账号可用,禁止分配给业务账号。

7.5 DQL查询高频易错点

  • 分组查询规范:GROUP BY分组查询中,SELECT后的字段必须是分组字段或聚合函数字段,否则会报SQL语法错误。

  • LIMIT分页误区:LIMIT 偏移量,条数,偏移量从0开始,不是1,新手极易出现分页数据错位问题。

  • 模糊查询通配符风险:%关键词% 全模糊查询无法走索引,大数据量场景下查询性能极差,面试常问优化方案。

7.6 总结:面试极简记忆口诀

结构增删改用DDL,业务数据靠DML; 查数只读是DQL,权限管控归DCL; 删改必带WHERE,截断不可回滚清; 远程百分本地端,权限刷新必执行。

本文总结

  • DDL 负责库表结构定义,DML 负责数据增删改,DQL 负责查询,DCL 负责权限分配与回收。
  • UPDATE 和 DELETE 必须依赖 WHERE 精准定位,批量操作前先用 SELECT 校验条件是最基本的安全习惯。
  • MySQL 基础 SQL 的关键不只是记语法,而是理解不同语句对结构、数据和权限的作用边界。
GYSTACK 文章文末广告 硅云云服务器活动 适合个人项目、轻量建站和出海业务部署。
后浪云移动端信息流广告 后浪云主机服务 适合长期部署、独立站和海外机房需求。