MySQL--DQL、DML、DDL、DCL概念与区别

在SQL中,根据功能和操作对象的不同,通常将语文分为四大类:DQL(数据查询语言)DML(数据操作语言)DDL(数据定义语言)DCL(数据控制语言)

一、DQL(Data Query Language,数据查询语言)

  • 定义:用于从数据库中检索数据,不修改数据或数据库结构

  • 核心命令:

    • SELECT:查询数据
  • 用途:

    • 从表中提取特定条件的过滤

    • 支持复杂的条件过滤、排序、分组、聚合等操作

  • 示例:

复制代码
SELECT name, age FROM users WHERE age > 18 ORDER BY name;

二、DML(Data Manipulation Language,数据操作语言)

  • 定义:用于对数据库中的数据进行增、删、改操作,直接影响数据内容

  • 核心命令:

    • INSERT:插入新数据

    • UPDATE:更新现有数据

    • DELETE:删除数据

  • 用途:

    • 维护数据库中的数据记录

    • 操作单位通常是表中的行(记录)

复制代码
INSERT INTO users (name, age) VALUES ('Alice', 25);
UPDATE users SET age = 26 WHERE name = 'Alice';
DELETE FROM users WHERE age < 18;

三、DDL(Data Definition Language,数据定义语言)

  • 定义:用于定义或修改数据库结构(如表、索引、视图等),直接影响数据库对象的逻辑结构

  • 核心命令:

    • CREATE:创建数据库对象(如表、索引)

    • ALTER:修改现有对象结构

    • DROP:删除数据库对象

    • TRUNCATE:快速清空表数据(删除表并重建结构)

  • 用途:

    • 管理数据库的物理和逻辑结构

    • 操作单位是数据库对象(如表、列)

  • 示例:

复制代码
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
ALTER TABLE users ADD COLUMN email VARCHAR(100);
DROP TABLE users;

四、DCL(Data Control Language,数据控制语言)

  • 定义:用于控制数据库访问权限和事务管理,确保数据安全性和完整性。

  • 核心命令:

    • GTANT:授予用户权限

    • REVOKE:撤销用户权限

    • COMMIT:提交事务(属于TCL)

    • ROLLBACK:回滚事务(属于TCL)

  • 用途:

    • 管理用户对数据库对象的访问权限

    • 控制事务的提交或回滚(严格来说,事务控制属于TCL)

  • 示例:

复制代码
GRANT SELECT, INSERT ON users TO user1;
REVOKE DELETE ON users FROM user1;

主要区别总结

类别 全称 功能 核心命令 操作对象 是否自动提交
DQL Data Query Language 查询数据 SELECT 数据记录 不修改数据,无提交
DML Data Manipulation Language 操作数据(增删改) INSERT, UPDATE, DELETE 数据记录 需显式提交或回滚事务
DDL Data Definition Language 定义/修改数据库结构 CREATE, ALTER, DROP, TRUNCATE 数据库对象(表、索引) 自动提交,无法回滚
DCL Data Control Language 控制访问权限和事务 GRANT, REVOKE 用户权限 自动提交

注意事项

  1. 事务控制语言(TCL)

    • COMMITROLLBACK 通常被归类为TCL,用于管理DML操作的事务。

    • DCL更侧重权限管理,而TCL侧重事务的提交与回滚。

  2. DDL的自动提交特性

    • DDL语句(如CREATEALTER)执行后会自动提交,无法通过ROLLBACK撤销。
  3. TRUNCATE的特殊性

    • 虽然TRUNCATE清空表数据,但属于DDL(直接操作表结构),而非DML。
相关推荐
heartbeat..3 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据6 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦6 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
myzshare7 小时前
实战分享:我是如何用SSM框架开发出一个完整项目的
java·mysql·spring cloud·微信小程序
YMatrix 官方技术社区7 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录8 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong8 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
墨笔之风9 小时前
java后端根据双数据源进行不同的接口查询
java·开发语言·mysql·postgres
欧亚学术9 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
oMcLin9 小时前
如何在Oracle Linux 8.4上搭建并优化Kafka集群,确保高吞吐量的实时数据流处理与消息传递?
linux·oracle·kafka