数据库开发必备:理解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

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

相关推荐
我命由我123455 分钟前
35.Java线程池(线程池概述、线程池的架构、线程池的种类与创建、线程池的底层原理、线程池的工作流程、线程池的拒绝策略、自定义线程池)
java·服务器·开发语言·jvm·后端·架构·java-ee
Arbori_262156 分钟前
Oracle 排除交集数据 MINUS
数据库·oracle
java1234_小锋3 小时前
MySQL中有哪几种锁?
数据库·mysql
whoarethenext3 小时前
qt的基本使用
开发语言·c++·后端·qt
Charlie__ZS4 小时前
Redis-事务
数据库·redis·缓存
Charlie__ZS5 小时前
Redis-数据类型
数据库·redis·缓存
神奇小永哥5 小时前
redis之缓存击穿
数据库·redis·缓存
莳花微语5 小时前
记录一次因ASM磁盘组空间不足,导致MAP进程无法启动
数据库·oracle
红云梦7 小时前
互联网三高-数据库高并发之分库分表
数据库·高并发·三高架构
王军新7 小时前
MySQL索引介绍
数据库·mysql