数据库开发必备:理解DDL、DML、DQL和DCL

前言

  理解数据库操作的基本分类及其功能至关重要,使用过数据库的小伙伴们都知道,SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。直接看图:

  这些分类不仅帮助我们更好地理解数据库的操作机制,还能在实际应用中合理高效地管理数据库。本文将深入解析这四类语言的作用,并结合实际操作,详细介绍其中的内容,帮助大家更好地理解和运用SQL语句。

一、DDL(数据定义语言)

1.1 DDL 概念

  DDL,全称(Data Definition Language 数据定义语言),用来定义数据库结构,包括创建、修改和删除数据库中的表、索引、视图、存储过程、触发器等数据库对象。DDL语句的特点是会自动提交,一旦执行就会永久生效,不可回滚。DDL 对这些对象和属性的管理和定义具体表现在以下几种操作语句上:

操作语句 简要说明
create 可以创建数据库和数据库的一些对象,如表、索引、视图等。
drop 可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
alter 修改数据表定义及属性,例如添加、删除或修改表字段。
truncate 清空表数据,但不会删除表结构。

  所以以后见到这3中SQL语句就知道它们是属于DDL语句。另外,DDL操作是隐性提交的,不能rollback。

1.2 DDL 使用指南

数据库操作

  • 查询所有数据库

    sql 复制代码
    SHOW DATABASES;
  • 查询当前数据库

    sql 复制代码
    SELECT DATABASE();
  • 创建数据库

    sql 复制代码
    CREATE DATABASE [IF NOT EXISTS] 数据库名字 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
  • 删除数据库

    sql 复制代码
    DROP DATABASE [IF EXISTS] 数据库名;

    【注意】如果删除一个不存在的数据库,将会报错。此时,可以加上参数 if exists,如果数据库存在,再执行删除,否则不执行删除。

表操作

  • 创建表:

    sql 复制代码
    CREATE TABLE if not exists 表名 (
        字段1 类型 [COMMENT '字段注释'],
        字段2 类型 [COMMENT '字段注释'],
        字段3 类型 [COMMENT '字段注释'],
        ...
        字段n 类型 [COMMENT '字段注释']
    ) [COMMENT '表注释'];

    【注意】在同一个数据库服务器中,不能创建两个名称相同的数据库,否则会报错。可以通过 if not exists 参数来解决这个问题,数据库不存在,则创建该数据库,如果存在,则不创建。

  • 添加字段:

    sql 复制代码
    ALTER TABLE 表名 ADD 字段名 数据类型 [COMMENT '注释'] [约束];
  • 修改数据类型

    sql 复制代码
    ALTER TABLE 表名 MODIFY 字段名 新数据类型;
  • 修改字段名和字段类型

    sql 复制代码
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [COMMENT '注释'] [约束];
  • 删除字段:

    sql 复制代码
    ALTER TABLE 表名 DROP 字段名;
  • 修改表名:

    sql 复制代码
    ALTER TABLE 表名 RENAME TO 新表名;
  • 删除表:

    sql 复制代码
    DROP TABLE [IF EXISTS] 表名;

    【注意】可选项 IF EXISTS 代表,只有表名存在时才会删除该表,表名不存在,则不执行删除操作。如果不加该参数项,删除一张不存在的表,执行将会报错。

  • 删除表并重新创建:

    sql 复制代码
    TRUNCATE TABLE 表名;

二、DQL(数据查询语言)

2.1 DQL概念

  DML,全称(Data QueryLanguage 数据查询语言),主要做数据库表或视图的数据记录查询操作,对应的SQL语句自然就是 SELECT 查询语句了。DQL 语句不会改变数据库中的数据,只是用于检索数据。DQL 是数据库操作中最常用的操作之一,能够帮助开发人员获取需要的数据。DDL语句操作具体表现在以下几种操作类型上:

操作语句 简要说明
select 从表中查询数据
where 指定查询条件。
order by 对查询结果进行排序
group by 对查询结果进行分组
having 对分组后的数据进行过滤。

2.2 DQL 使用指南

DQL - 基本查询

  • 查询指定字段:

    sql 复制代码
    SELECT 字段1, 字段2, 字段3, ... FROM 表名;
  • 查询所有字段:

    sql 复制代码
    SELECT * FROM 表名;
  • 给字段设置别名:

    sql 复制代码
    SELECT 字段1 [AS 别名1], 字段2 [AS 别名2], ... FROM 表名;
  • 查询去重后的字段值:

    sql 复制代码
    SELECT DISTINCT 字段列表 FROM 表名;

DQL - 条件查询

sql 复制代码
SELECT 字段列表 FROM 表名 WHERE 条件列表;

DQL - 聚合函数

  将一列数据作为一个整体,进行统计计算。常见聚合函数包括:count、max、min、avg、sum等等。注意:NULL值是不参与所有聚合函数运算的。

sql 复制代码
SELECT 聚合函数(字段列表) FROM 表名;

DQL - 分组查询

sql 复制代码
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后过滤条件];

【注意】WHERE 是在分组之前进行过滤,不能与聚合函数一起使用。HAVING 是在分组之后对结果进行过滤,可以与聚合函数一起使用。WHERE 不能对聚合函数进行判断,而 HAVING 可以。

DQL - 排序查询

sql 复制代码
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

DQL - 分页查询

sql 复制代码
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

【注意】起始索引 从 0 开始,起始索引 = (查询页码 - 1)* 每页显示记录数。分页查询是数据库的通用功能,不同的数据库有不同的实现,这里是以 MySQL 为例。

三、DML(数据操作语言)

3.1 DML概念

  DML,全称(Data Manipulation Language 数据操作语言)用于操作数据库对象中包含的数据,即它的操作对象是数据记录,用来对表内数据的添加、更新、删除等,DML操作通常需要手动提交或回滚。这里大家应该就明白了DDL语句操作具体表现在以下几种操作类型上:

操作类型 简要说明
insert 向数据表张插入一条记录。
delete 删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但不删除表结构。
update 用于修改已存在表中的记录的内容。

3.2 DML 使用指南

DML - 添加数据

  • 给指定字段添加数据:

    sql 复制代码
    INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

    【注意】插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

  • 给全部字段添加数据:

    sql 复制代码
    INSERT INTO 表名 VALUES (值1, 值2, ...);
  • 批量添加数据:

    sql 复制代码
    INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
    
    INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

DML - 修改数据

sql 复制代码
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [WHERE 条件];

【注意】修改语句的条件可以有,也可以没有,若没有条件,则会修改整张表的所有数据。

DML - 删除数据

sql 复制代码
DELETE FROM 表名 [WHERE 条件];

【注意】DELETE语句的条件可以有,也可以没有,若没有条件则删除整张表数据,而且DELETE语句不能删除某一个字段的值。

四、DCL(数据控制语言)

4.1 DCL概念

  DCL,全称(Data Control Language 数据控制语言),它操作是数据库对象的权限,用于授权/撤销数据库及其字段的权限等。通过 DCL,数据库管理员可以控制谁可以访问数据库以及执行哪些操作。这些操作的可以使数据更加地安全。DCL的主要操作语句提现在如下几种:

操作语句 简要说明
Grant 授权语句,允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
Revoke 可以废除某用户或某组或所有用户访问权限

4.2 DCL 使用指南

DCL - 管理用户

  • 创建用户

    sql 复制代码
    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  • 修改用户密码

    sql 复制代码
    ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
  • 删除用户

    sql 复制代码
    DROP USER '用户名'@'主机名';

DCL - 权限控制

  • 查询权限

    sql 复制代码
    SHOW GRANTS FOR '用户名'@'主机名';
  • 授权权限

    sql 复制代码
    GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  • 撤销权限

    sql 复制代码
    REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

【注意】

  • 多个权限之间,使用逗号分隔 :在授予用户多个权限时,必须用逗号 , 来分隔每个权限。
  • 授权时,数据库名和表名可以使用 \* 进行通配,代表所有 :可以使用星号 * 来代替具体的数据库名和表名,表示对所有数据库或表进行授权。

常见权限

权限 说明
ALL、ALL PRIVILEGES 所有权限
SELECT 查询数据
INSERT 插入数据
UPDATE 修改数据
DELETE 删除数据
ALTER 修改表结构
DROP 删除数据库/表/视图
CREATE 创建数据库/表

五、小结

SQL语句主要分为四大类,每一类都有其特定的用途:

SQL 类型 作用 关键字
DDL (数据定义) 定义数据库结构 CREATE、ALTER、DROP、TRUNCATE
DML (数据操作) 增、删、改数据 INSERT、UPDATE、DELETE
DQL (数据查询) 查询数据 SELECT、WHERE、ORDER BY、GROUP BY、HAVING
DCL (数据控制) 访问控制 GRANT、REVOKE

  通过本文的详细讲解,我们深入了解了数据库操作语言的四个主要分类:DDL 、DML 、DQL 和 DCL。每一类操作都有其独特的作用和功能,掌握它们是我们进行数据库设计、管理和开发的基础。在实际应用中,我们常常会结合这些操作进行综合应用,以满足不同的业务需求,希望更好地理解和使用数据库操作语言,从而提高数据库管理和开发的效率。

相关推荐
前端冒菜师几秒前
我为什么做了 Iris,又为什么停下了它
后端·ai编程
子一!!2 分钟前
集成Spring家族的Spring论坛实战==一阶段
java·后端·spring
Ticnix2 分钟前
你的 Agent 聊到第 20 轮就"失忆"?你管理的是历史,高手管理的是上下文
后端·python·agent
不合格的程序员2 分钟前
Agent Memory架构设计与实现
后端·ai编程
用户93816912553609 分钟前
分页查询 Out of sort memory 问题
后端
xyLJ15 分钟前
为什么 Spring Boot 自动配置了 Redis,还要自己写 RedisTemplate?
后端
adinnet202629 分钟前
意图识别(Intent Recognition):智能体怎么听懂你想干啥
大数据·数据库
笨小孩@GF 知行合一32 分钟前
易语言-基础-外部数据库
数据库·编程·易语言·中文编程
DolphinDB智臾科技37 分钟前
告别繁琐解析!BinaryTcp 模块实现沪深 Level‑1 行情接收‑解析‑落库一站式能力
数据库·插件·dolphindb
weixin_4045512440 分钟前
Oracle SQL 优化知识库:构建方案与价值评估
数据库·sql·oracle