在数据库管理与开发中,DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)是最基础且核心的三类操作语言,它们共同支撑起数据库的结构搭建、数据管理与信息提取。无论是初学者入门,还是资深开发者日常工作,都离不开对这三类语言的灵活运用。本文将从概念解析、基础语法、实际案例三个维度,带大家快速掌握 DDL、DML、DQL 的核心知识,为数据库操作打下坚实基础。
一、DDL:定义数据库结构的 “建筑师”
DDL(Data Definition Language,数据定义语言)主要用于创建、修改和删除数据库中的对象,如数据库、数据表、视图、索引等,它决定了数据库的 “骨架”,操作后会直接影响数据库的结构。常见的 DDL 命令包括CREATE(创建)、ALTER(修改)、DROP(删除)、TRUNCATE(清空),这些命令执行后通常无法撤销,需谨慎操作。
1. 核心语法与实例
创建数据库:使用CREATE DATABASE命令,用于初始化一个新的数据库空间。
语法:
>CREATE DATABASE [数据库名] [CHARACTER SET 字符集] [COLLATE 排序规则];
示例:创建一个名为student_db、字符集为utf8mb4的数据库:CREATE DATABASE student_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
创建数据表:使用CREATE TABLE命令,在指定数据库中定义数据表的结构,包括字段名、数据类型、约束条件(如主键、非空、唯一等)。
>语法:CREATE TABLE [表名] (字段1 数据类型 [约束], 字段2 数据类型 [约束], ...);
示例:在student_db中创建student表,包含学号(主键)、姓名(非空)、年龄、性别字段:USE student_db; -- 切换到目标数据库 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自动增长 name VARCHAR(50) NOT NULL, -- 姓名,非空 age INT DEFAULT 0, -- 年龄,默认值0 gender CHAR(2) CHECK (gender IN ('男', '女')) -- 性别,仅允许“男/女” );
修改数据表:使用ALTER TABLE命令,可添加字段、修改字段类型、删除字段或修改表名。
示例 1:为student表添加 “班级” 字段:ALTER TABLE student ADD class VARCHAR(50);
示例 2:将 “年龄” 字段的数据类型改为TINYINT:ALTER TABLE student MODIFY age TINYINT;
删除数据表 / 数据库:使用DROP命令,删除后数据与结构会完全清除,需格外小心。
示例 1:删除student表:DROP TABLE IF EXISTS student;
(IF EXISTS避免表不存在时报错)
示例 2:删除student_db数据库:DROP DATABASE IF EXISTS student_db;
二、DML:操纵数据的 “管理员”
DML(Data Manipulation Language,数据操纵语言)用于对数据库表中的数据进行增、删、改操作,它不改变数据库结构,只作用于表中的具体记录。常见的 DML 命令包括INSERT(插入)、UPDATE(更新)、DELETE(删除),这些操作默认会开启事务,可通过COMMIT(提交)或ROLLBACK(回滚)确认或撤销。
1. 核心语法与实例
插入数据:使用INSERT INTO命令,向数据表中添加一条或多条记录。
>语法 1(单条插入):INSERT INTO [表名] (字段1, 字段2, ...) VALUES (值1, 值2, ...);
>语法 2(多条插入):INSERT INTO [表名] (字段1, 字段2, ...) VALUES (值1, 值2, ...), (值3, 值4, ...);
示例:向student表插入 2 条学生记录: INSERT INTO student (name, age, gender, class) VALUES ('张三', 18, '男', '高一(1)班'), ('李四', 17, '女', '高一(2)班');
更新数据:使用UPDATE命令,修改表中符合条件的记录,必须搭配WHERE子句,否则会更新表中所有记录。
>语法:UPDATE [表名] SET 字段1=值1, 字段2=值2, ... WHERE [条件];
示例:将 “张三” 的年龄改为 19:UPDATE student SET age = 19 WHERE name = '张三';
删除数据:使用DELETE命令,删除表中符合条件的记录,同样需搭配WHERE子句,避免误删全表数据。
>语法:DELETE FROM [表名] WHERE [条件];
示例:删除 “李四” 的记录:DELETE FROM student WHERE name = '李四';
注意:若需清空表中所有数据且保留表结构,也可使用TRUNCATE TABLE 表名;,但它属于 DDL 命令,执行后无法回滚。
三、DQL:提取数据的 “检索师”
DQL(Data Query Language,数据查询语言)用于从数据库表中查询所需数据,是日常开发中使用最频繁的语言,核心命令为SELECT。通过SELECT搭配FROM、WHERE、GROUP BY、ORDER BY、LIMIT等子句,可实现精准的数据筛选、排序、分组与分页,满足多样化的查询需求。
1. 核心语法与实例
DQL 基础语法结构:SELECT [字段/表达式] FROM [表名] [WHERE 条件] [GROUP BY 字段] [HAVING 分组条件] [ORDER BY 字段 排序方式] [LIMIT 分页参数];
基础查询:查询表中指定字段或所有字段的数据。
示例 1:查询student表中所有学生的姓名和年龄:SELECT name, age FROM student;
示例 2:查询student表中所有字段的数据(表示所有字段,不推荐在复杂表中使用,效率较低):
`SELECT FROM student;
条件查询:使用WHERE子句筛选符合条件的记录,支持=(等于)、>(大于)、<(小于)、IN(在范围内)、LIKE(模糊匹配)等运算符。
示例 1:查询年龄大于 17 的学生:SELECT name, age FROM student WHERE age > 17;
示例 2:查询 “高一 (1) 班” 或 “高一 (3) 班” 的学生(IN用法):SELECT name, class FROM student WHERE class IN ('高一(1)班', '高一(3)班');
示例 3:查询姓名以 “张” 开头的学生(LIKE用法,%表示任意字符):SELECT name FROM student WHERE name LIKE '张%';
排序与分页:使用ORDER BY排序(ASC升序,默认;DESC降序),LIMIT实现分页(避免一次性查询大量数据)。
示例:查询所有学生,按年龄降序排序,只显示前 10 条记录:SELECT * FROM student ORDER BY age DESC LIMIT 10;
聚合查询:搭配COUNT(计数)、SUM(求和)、AVG(平均值)等聚合函数,实现数据统计。
示例 1:统计 “高一 (1) 班” 的学生人数:SELECT COUNT(*) AS class_count FROM student WHERE class = '高一(1)班';(AS给结果字段起别名)
示例 2:计算所有学生的平均年龄:SELECT AVG(age) AS avg_age FROM student;
四、三者关系与使用注意事项
DDL、DML、DQL 虽功能不同,但在实际开发中相辅相成:先用 DDL 搭建数据库与表结构,再用 DML 录入和维护数据,最后通过 DQL 提取所需信息。使用时需注意以下几点:
- DDL 命令(如DROP、TRUNCATE)执行后无法撤销,操作前务必确认数据备份;
- DML 的UPDATE和DELETE必须加WHERE条件,避免误操作全表数据;
- DQL 查询时尽量指定具体字段,避免使用*,同时合理使用索引优化查询效率。