数据库中DDL、DML、DCL的区别是什么?

数据库中DDL、DML、DCL的区别是什么?

在数据库的使用过程中,SQL(结构化查询语言)常常被用来执行不同的操作,主要分为三类:DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)。这三类语言的作用各不相同,在数据库的管理和操作中有着各自独特的职责。本文将深入分析这三类语言的区别与应用。
在这里插入图片描述

一、DDL(数据定义语言)

1. 定义和作用

DDL(Data Definition Language)是用来定义和管理数据库中的数据结构和对象的语言。它主要涉及数据库的创建、修改和删除等操作。通过DDL,数据库管理员(DBA)可以定义表格、索引、视图、存储过程等对象的结构。

2. 常见的DDL语句
  • CREATE:用于创建数据库对象,如数据库、表、视图、索引等。
    • 示例:CREATE TABLE users (id INT, name VARCHAR(50));
  • ALTER:用于修改现有数据库对象的结构。
    • 示例:ALTER TABLE users ADD COLUMN email VARCHAR(100);
  • DROP:用于删除数据库对象,如表、视图、数据库等。
    • 示例:DROP TABLE users;
  • TRUNCATE:用于删除表中的所有数据,但不删除表本身。与DELETE不同,TRUNCATE是不可恢复的。
    • 示例:TRUNCATE TABLE users;
  • COMMENT:用于为数据库对象添加注释。
    • 示例:COMMENT ON COLUMN users.name IS 'User name';
  • REVOKE/GRANT:虽然常用于DCL(数据控制语言),但在某些数据库系统中,它也被归类为DDL操作,用于授予或撤销权限。
    • 示例:GRANT SELECT ON users TO 'user_role';
3. DDL的特征
  • DDL语句通常会直接影响数据库结构,因此执行这些语句时会有“隐式提交”的效果,一旦执行完成,所有的更改都立即生效。
  • DDL操作通常不可回滚(除非使用事务控制的数据库支持回滚)。执行之后的数据和结构会永久改变,除非通过其他手段(如备份恢复)恢复。

二、DML(数据操纵语言)

1. 定义和作用

DML(Data Manipulation Language)用于处理数据库中的数据。DML语句的核心作用是对数据表中的记录进行增、删、改、查等操作。DML操作允许用户与数据交互、插入新数据、更新现有数据以及删除数据等。

2. 常见的DML语句
  • SELECT:用于从数据库中查询数据。
    • 示例:SELECT * FROM users;
  • INSERT:用于向数据库表中插入数据。
    • 示例:INSERT INTO users (id, name, email) VALUES (1, 'John Doe', 'john.doe@example.com');
  • UPDATE:用于更新表中现有的记录。
    • 示例:UPDATE users SET email = 'john_new@example.com' WHERE id = 1;
  • DELETE:用于删除表中的记录。
    • 示例:DELETE FROM users WHERE id = 1;
  • CALL:用于调用存储过程。
    • 示例:CALL update_user_email(1, 'john_updated@example.com');
  • EXPLAIN PLAN:用于查看查询的执行计划。
    • 示例:EXPLAIN PLAN FOR SELECT * FROM users;
  • LOCK TABLE:用于锁定表,以便其他用户无法修改该表的数据。
    • 示例:LOCK TABLE users IN EXCLUSIVE MODE;
3. DML的特征
  • DML语句通常在事务中执行,并且支持回滚(ROLLBACK),如果操作发生错误,可以撤销对数据的修改。
  • 与DDL不同,DML操作是针对数据内容的修改,而非数据库结构的修改。

三、DCL(数据控制语言)

1. 定义和作用

DCL(Data Control Language)用于控制数据库的访问权限和事务控制。DCL语句主要涉及到数据库用户的权限管理及数据安全方面的操作。它确保了只有具有特定权限的用户才能对数据库进行操作。

2. 常见的DCL语句
  • GRANT:用于授予用户或角色特定的权限。
    • 示例:GRANT SELECT, INSERT ON users TO 'user_role';
  • REVOKE:用于撤销已授予用户或角色的权限。
    • 示例:REVOKE SELECT ON users FROM 'user_role';
  • COMMIT:用于提交事务,使所有修改永久生效。
    • 示例:COMMIT;
  • ROLLBACK:用于回滚事务,撤销当前事务中的所有操作。
    • 示例:ROLLBACK;
  • SAVEPOINT:用于设置事务中的保存点,便于回滚到某个特定的点。
    • 示例:SAVEPOINT savepoint_name;
  • SET TRANSACTION:用于设置事务的隔离级别。
    • 示例:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
3. DCL的特征
  • DCL操作主要用于授权和控制数据库的访问权限,确保数据的安全性与完整性。
  • DCL操作通常是由数据库管理员(DBA)执行的,用于管理用户权限和数据库的事务控制。
  • 与DML不同,DCL并不直接涉及到数据的操作,而是控制谁可以操作数据以及如何操作数据。

四、DDL、DML、DCL的主要区别

类别作用常见命令操作对象可回滚性事务控制
DDL用于定义数据库结构CREATE, ALTER, DROP, TRUNCATE, COMMENT数据库、表、视图、索引等不可回滚
DML用于操作数据SELECT, INSERT, UPDATE, DELETE表中的数据可回滚支持
DCL用于控制权限和事务GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT用户权限、事务不适用支持

五、总结

  • DDL主要用于定义和管理数据库结构,执行DDL语句会对数据库对象的结构产生永久性的影响。
  • DML则处理数据库中的数据内容,执行DML语句时,用户可以增、删、改、查数据,且这些操作可以通过事务回滚。
  • DCL用于控制用户和权限的管理,确保数据的安全性与访问控制,同时还涉及事务的提交和回滚等操作。

了解DDL、DML、DCL的区别对于数据库管理员和开发者非常重要,因为它们是数据库操作中不可或缺的一部分,每种语言的操作性质和使用场景都不同,合理使用可以帮助更高效、更安全地管理和操作数据库。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成

海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成 一、背景介绍 每天有2000万条聊天消息,一年下来几千万亿海量数据。为应对这种规模的数据存储和处理需求,本文将从以下几…

Vim 中替换字符或文本

在 Vim 中替换字符或文本可以使用 替换命令(substitute),其基本语法为: :[range]s/old/new/[flags]1. 基本替换 命令说明:s/foo/bar/替换当前行的第一个 foo 为 bar:s/foo/bar/g替换当前行的 所有 foo 为 bar:%s/foo/bar/g替换 …

当传统美术馆遇上数字革命:观众体验将迎来哪些颠覆性变革?

当数字科技与艺术创作深度交织,美术馆与艺术机构正经历前所未有的颠覆性浪潮。这是否宣告传统展览空间已正式跨入数字媒介主导的新纪元?投影映射与虚拟现实技术不断突破物理限制,画布与雕塑的边界在光影与代码中逐渐消融。这场革命不仅重构了…

内容/社区APP增长:用Deeplink让用户分享的内容“一键直达”

对于内容平台和互动社区APP而言,优质内容的自发传播是用户增长和活跃度提升的核心驱动力之一。用户发现一篇深度好文、一个精彩视频或是一个引人入胜的讨论帖,自然而然地想要分享给好友。然而,这个看似简单的分享动作,却往往在触达…

Uniapp:vite.config.js全局配置

目录 一、基本概述二、配置自动引入插件一、基本概述 vite.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 vite 的编译选项 二、配置自动引入插件 在项目命令行终端中执行如下代码 npm install unplugin-auto-import…

JavaScript 与 Java 学习笔记

一、JavaScript 简介 1. 定义 浏览器脚本语言:主要用于实现网页交互功能(鼠标点击、键盘输入响应等) 服务器端扩展:通过 Node.js 运行时环境可进行后端开发 2. 核心特点 动态性:可实时修改 DOM 结构(增…

Shell脚本-随机数实战案例

在Shell脚本编程中,生成随机数是一项非常实用的技能。无论是用于模拟、测试、游戏开发还是安全相关的应用(如生成密码),能够灵活地生成随机数都是非常有用的。本文将通过几个实际的应用案例来展示如何在Shell脚本中使用随机数解决…

面试算法高频08-动态规划-03

练习题 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每…

基于 EFISH-SBC-RK3588 的无人机多光谱/红外热成像边缘计算方案

一、硬件架构设计‌ ‌核心算力平台(EFISH-SBC-RK3588)‌ ‌处理器性能‌:搭载 8 核 ARM 架构(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 与 Mali-G610 GPU,支持多光谱图像实时融…

Python小酷库系列:pyNest,把FastAPI程序写出Spring的味道

pyNest,把FastAPI程序写出Spring的风格 快速入门1、安装pyNest2、创建项目3、编写app_module.py4、编写app_service.py5、编写app_controller.py6、编写main.py7、启动程序 核心概念1、Modules2、Controllers3、Providers4、ORM Provider NestJS是风靡于Node.js圈的…

HTML 详解:从基础结构到语义标签

目录 一、HTML 是什么&#xff1f;二、HTML 的基本结构✅ 简要说明&#xff1a; 三、常见 HTML 标签讲解3.1 标题标签 <h1> ~ <h6>3.2 段落和换行3.3 超链接3.4 图像插入3.5 列表无序列表&#xff1a;有序列表&#xff1a; 3.6 表格结构 四、HTML 语义化标签详解五…

用Python做有趣的AI项目 6:AI音乐生成器(LSTM Melody Generator)

&#x1f3b5; 项目名称&#xff1a;AI音乐生成器&#xff08;LSTM Melody Generator&#xff09; &#x1f9e0; 项目简介 这个项目的目标是&#xff1a;用 AI 来自动生成简单的旋律&#xff08;MIDI格式&#xff09;&#xff0c;类似于基础的钢琴曲、背景音乐片段。 我们使…

【运维】利用任务计划程序定时重启 nssm 服务 | Windows 服务每日定时维护实践

&#x1f680; 利用任务计划程序定时重启 nssm 服务 | Windows 服务每日定时维护实践 一、前言 在 Windows 系统中&#xff0c;nssm&#xff08;Non-Sucking Service Manager&#xff09; 是一个非常好用的工具&#xff0c;可以将任意可执行程序注册为系统服务。很多运维场景…

MATLAB小试牛刀系列(1)

问题描述 某机床厂生产甲、乙两种机床&#xff0c;每台机床销售后的利润分别为 4 千元与 3 千元。生产甲机床需用 A、B 机器加工&#xff0c;加工时间分别为每台 2h 和每台 1h&#xff1b;生产乙机床需用 A、B、C 三种机器加工&#xff0c;加工时间均为每台 1h。若每天可用于加…

云原生周刊:Kubernetes v1.33 正式发布

开源项目推荐 Robusta Robusta 是一个开源的 K8s 可观测性与自动化平台&#xff0c;旨在增强 Prometheus 告警的智能化处理能力。它通过规则和 AI 技术对告警进行丰富化处理&#xff0c;自动附加相关的 Pod 日志、图表和可能的修复建议&#xff0c;支持智能分组、自动修复和高…

React速通笔记

相关视频&#xff1a; 黑马程序员前端React18入门到实战视频教程&#xff0c;从reacthooks核心基础到企业级项目开发实战&#xff08;B站评论、极客园项目等&#xff09;及大厂面试全通关_哔哩哔哩_bilibili 一、React介绍 React由Meta公司开发&#xff0c;是一个用于 构建W…

人工智能与机器学习:Python从零实现K-Means 算法

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

【神经网络与深度学习】训练集与验证集的功能解析与差异探究

引言 在深度学习模型的训练过程中&#xff0c;训练集和验证集是两个关键组成部分&#xff0c;它们在模型性能的提升和评估中扮演着不可替代的角色。通过分析这两者的区别和作用&#xff0c;可以帮助我们深入理解模型的学习过程和泛化能力&#xff0c;同时为防止过拟合及优化超…

Macos m系列芯片环境下python3安装mysqlclient系列问题

最近学习python3&#xff0c;在安装mysqlclient的时候遇到了一些问题&#xff0c;直接使用哦pip install mysqlclient 直接报错了&#xff0c;记录一下解决方案。 环境信息 设备&#xff1a;Macbook Pro m1 系统&#xff1a;macos Sequoia 15.3.2 最终成功的python版本&#xf…

微信小程序-van-uploader的preview-size

preview-size支持数组格式 修改前修改后1、升级微信小程序里面的van版本:2、 重新构建npm3、重启微信开发工具 修改前 引用van组件的上传文件&#xff0c;设置预览图尺寸&#xff0c;刚开始设置的是preview-size“140”&#xff0c;出来的效果就是一个正方形。 修改后 1、升级…