当前位置: 首页 > news >正文

一篇文章,彻底理解数据库操作语言:DDL、DML、DCL、TCL

最近与开发和运维讨论数据库账号及赋权问题时,发现大家对DDL和DML两个概念并不了解。于是写一篇文章,系统的整理一下在数据库领域中的DDL、DML、DQL、DCL的使用及区别。

通常,数据库SQL语言共分为四大类:数据定义语言DDL,数据操作语言DML,数据查询语言DQL,数据控制语言DCL。再加上事务控制语言TCL,一个共5个。

下面,我们就详细了解一下它们。

数据定义语言DDL

DDL(Data Definition Language)是数据定义语言,它用于定义或改变数据库或表的结构等初始化工作上。通常,包括数据类型、表(Table)之间的关系以及数据库(Database)中的约束、索引、视图、存储过程、触发器等。

DDL命令通常用于创建数据库模式,例如CREATEALTERDROPTRUNCATERENAMECOMMENT等。这些命令一旦执行,就无法被撤销,因为它们改变了数据库的结构。

DDL常见命令及使用

CREATE:用来创建数据库、表、索引等对象。例如:

CREATE DATABASE testDB;                 --创建一个名为testDB的数据库
CREATE TABLE Students (ID INT, Name TEXT);  --创建一个名为Students的表,包含ID和Name两个字段

ALTER:用来修改已存在的数据库对象。例如,

ALTER TABLE Students ADD Grade INT;        --在Students表中添加一个名为Grade的字段
ALTER TABLE Students DROP COLUMN Grade;    --在Students表中删除名为Grade的字段

DROP:用来删除整个数据库或者数据库中的表。例如,

DROP DATABASE testDB;                     --删除名为testDB的数据库
DROP TABLE Students;                      --删除Students表

TRUNCATE:用来删除表中所有的行,但不删除表本身。例如,

TRUNCATE TABLE Students;                 --删除Students表中的所有数据,但不删除表本身

RENAME:用来重命名数据库或者表。例如,

ALTER TABLE Students RENAME TO Pupils;  --将Students表重命名为Pupils

COMMENT:用来为数据库对象如表、列添加注释。例如,

COMMENT ON COLUMN Students.Name IS 'Student Name';  --在Students表的Name列上添加注释'Student Name'

以上是几种常见的DDL命令示例,不同的数据库系统可能语法稍有不同,使用时需要参考对应数据库的文档。

数据操作语言DML

DML(Data Manipulation Language)是数据操作语言,用于管理和检索数据库中的数据。适用于对数据库中的数据进行一些简单操作,比如增删改查表中的数据。

DML命令用于处理表中的记录,例如INSERT(插入)、UPDATE(更新)、SELECT(查询)、DELETE(删除)等。这些命令不会影响数据库的结构,而是直接作用于数据本身。如果执行了错误的操作,可以通过回滚机制来取消这些操作。

需要注意的是,DML命令不会自动提交,而且是可以回滚操作。

常用的语句关键字有:SELECTINSERTUPDATEDELETEMERGECALLEXPLAIN PLANLOCK TABLE

DML常见命令及使用

以下的例子基于 SQL 语言:

SELECT:从数据库中检索数据。例如,

SELECT * FROM Students;                    --选择Students表中的所有数据
SELECT Name, Grade FROM Students;          --选择Students表中的Name和Grade数据

INSERT:在表中插入新的数据。例如,

INSERT INTO Students (ID, Name, Age)
VALUES (1, 'Tom', 18);                    --在Students表中插入一条新的数据

UPDATE:更新数据库表中的数据。例如,

UPDATE Students 
SET Age = 19 
WHERE ID = 1;                             --将Students表中ID为1的记录的Age设置为19

DELETE:从数据库中删除数据。例如,

DELETE FROM Students
WHERE ID = 1;                             --删除Students表中ID为1的数据

MERGE:合并两张表或更改其中一张表的数据。例如,

MERGE INTO Students AS Target
USING (SELECT ID, Name FROM Enrolled_Students) AS Source
ON Target.ID = Source.ID
WHEN MATCHED THEN 
UPDATE SET Name = Source.Name 
WHEN NOT MATCHED THEN 
INSERT (ID, Name) VALUES (Source.ID, Source.Name); --更新已存在的记录或插入新的记录

CALL:调用一个存储过程。例如,

CALL Update_Students_Age(18); -- 调用名为“Update_Students_Age”的存储过程

EXPLAIN PLAN:提供一条查询语句的执行计划。例如,

EXPLAIN PLAN FOR SELECT * FROM Students; -- 显示查询所有学生数据的执行计划

LOCK TABLE:对数据库表进行锁定,以控制并发读写。例如,

LOCK TABLE Students IN EXCLUSIVE MODE;  -- 对Students表施加独占锁

以上是几种常见的DML命令示例,不同的数据库系统可能语法稍有不同,具体使用时需要参考对应数据库的文档。

数据控制语言DCL

DCL(Data Control Language)数据控制语言:主要用于控制用户对数据库的访问权限以及对数据的执行权限。常见的DCL语句包括GRANT、REVOKE等。

DCL主要包括两种SQL命令,分别是GRANT和REVOKE。

GRANT:该命令用于授予用户对数据库对象(例如表格)的访问权限。下面是一个例子:

GRANT SELECT, INSERT, UPDATE ON Students TO user1;

在这个例子中,给 "user1" 授予了对 "Students" 表进行 SELECT、INSERT 和 UPDATE 的权限。

REVOKE:该命令用于撤回已经授予用户的某些权限。

下面是一个例子:

REVOKE UPDATE ON Students FROM user1;

在这个例子中,撤回了 "user1" 对 "Students" 表的 UPDATE 权限。

使用DCL,数据库管理员可以精细化管理数据库的访问权限,保护数据的安全性。

注意,这些命令的具体语法和使用可能会根据使用的数据库系统而有所不同,所以在实际使用时,需要参考相应数据库的具体文档。

数据查询语言DQL

DQL(Data Query Language)数据查询语言:主要用来查询数据。实际上,DQL在操作中主要体现为SQL的SELECT语句。

例如,我们有一个学生表(Students)包括ID, 名字(Name), 年龄(Age)等字段:

  1. 查询所有数据:
SELECT * FROM Students;

这条命令会返回Students表中的所有行和列。

  1. 查询部分字段:
SELECT Name, Age FROM Students;

这条命令仅返回Name和Age字段的数据。

  1. 对查询结果进行筛选:
SELECT * FROM Students WHERE Age > 18;

这条命令只返回年龄大于18的学生数据。

  1. 对查询结果进行排序:
SELECT * FROM Students ORDER BY Age DESC;

这条命令将数据按照年龄降序排列后返回。

以上几个例子展示了最基本的数据查询操作,但是实际上SELECT语句的用法和技巧还有很多,例如聚合函数(如COUNT、SUM)、分组(GROUP BY)、连接(JOIN)等等。

事务控制语言TCL

TCL (Transaction Control Language) 是事务控制语言的简称,主要用来管理和控制数据库中的事务(Transaction),以保证数据库操作的完整性和一致性。

TCL命令往往和DML(数据操作语言)命令一起使用,以确保一系列的数据库操作要么全部成功,要么全部不成功(可回滚至操作前的状态)。

TCL 主要包括以下几种命令:

COMMIT:用于提交事务,将所有数据库修改保存到数据库中。

INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
COMMIT;  -- 提交事务,将插入的数据保存到数据库中

ROLLBACK:用于回滚事务,撤销所有未经提交的数据库修改。

INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
ROLLBACK;  -- 回滚事务,撤销上一条插入命令

SAVEPOINT:为事务中的一系列操作设定保存点。设立保存点后,可以选择只回滚到保存点的部分,而不需要全部回滚。

SAVEPOINT SP1;  -- 创建保存点 SP1
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
ROLLBACK TO SP1;  -- 回滚至保存点 SP1,不会撤销保存点后的操作

以上就是SQL中的TCL中的主要命令,用于确保数据库的完整性和一致性。

小结

本篇文章以具体的SQL语句讲解了数据库SQL语言四大分类(数据定义语言DDL,数据操作语言DML,数据查询语言DQL,数据控制语言DCL),同时也介绍了事务控制语言TCL。

针对不同的数据库,具体的SQL可能有所不同,但分类思想和功能基本相同。在上述英文缩写的记忆中,建议通过英文原文,特别是中间的英文字母来辅助记忆。

相关文章:

一篇文章,彻底理解数据库操作语言:DDL、DML、DCL、TCL

最近与开发和运维讨论数据库账号及赋权问题时,发现大家对DDL和DML两个概念并不了解。于是写一篇文章,系统的整理一下在数据库领域中的DDL、DML、DQL、DCL的使用及区别。 通常,数据库SQL语言共分为四大类:数据定义语言DDL&#xf…...

Linux编辑器之vim的使用

文章目录 一、vim简介二、vim的基本概念三、vim的基本操作四、vim正常模式命令集移动光标删除文字复制替换撤销上一次操作更改跳至指定的行vim末行模式命令集列出行号跳到文件中的某一行查找字符保存文件离开vim 五、进阶vim玩法打开文件批量注释代码执行shell命令指定注释窗口…...

制作OpenSSH 9.6 for openEuler 22.03 LTS的rpm升级包

OpenSSH作为操作系统底层管理平台软件,需要保持更新以免遭受安全攻击,编译生成rpm包是生产环境中批量升级的最佳途径。本文在国产openEuler 22.03 LTS系统上完成OpenSSH 9.6的编译工作。 一、编译环境 1、准备环境 基于vmware workstation发布的x86虚…...

DNS配置文件讲解

1. 概述 BIND:Berkeley Internet Name Domain ,伯克利因特网域名解析服务是一种全球使用最广泛的、 最高效的、最安全的域名解析服务程序 2. 安装软件 [rootserver ~]# yum install bind -y 3. bind服务中三个关键文件 /etc/named.conf : 主配置文件…...

142:vue+leaflet 加载tomtom地图(多种形式)

第142个 点击查看专栏目录 本示例介绍如何在vue+leaflet中添加tomtom地图,这里包含了多种形式,诸如中文标记、英文标记、白天地图、晚上地图、卫星影像图,高山海拔地形图等。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例…...

Android Mac电脑更改aar中的文件再打包

一 问题 要在Mac电脑上替换AAR中的文件并重新打包。 二 解决方案 1.解压AAR文件 将AAR文件重命名为.zip,并解压缩它,得到一个文件夹。 2.替换文件 在解压后的文件夹中找到您想替换的文件,将其替换为新文件。 3.重新打包 打开终端&…...

Jmeter脚本录制:抓取IOS手机请求包!

现在移动端的项目越来越多,今天给大家介绍一下,在IOS下Jmeter如何抓包。 1、电脑连上wifi; 2、Jmeter中配置“HTTP代理服务器” 1)启动Jmeter; 2)“测试计划”中添加“线程组”; 3)“测试计划”中添加“HTTP代理服务器”&#…...

大数据分析案例-基于随机森林算法构建电影票房预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…...

关于Gitlab用户登录提示无限重定向循环ERR_TOO_MANY_REDIRECTS

#工作笔记# 查阅了网上所有相关的记录,都没有解决gitlab登录/users/sign_up/welcome提示ERR_TOO_MANY_REDIRECTS,好在最终解决了,记录在此。 先说下起因: github哼哼不想用了,原因太多,所以内部讨论用git…...

突破瓶颈,提升开发效率:Spring框架进阶与最佳实践-IOC

IOC相关内容 1.1 bean基础配置1.1.1 bean基础配置(id与class)1.1.2 bean的name属性步骤1:配置别名步骤2:根据名称容器中获取bean对象步骤3:运行程序 1.1.3 bean作用范围scope配置1.1.3.1 验证IOC容器中对象是否为单例验证思路具体实现 1.1.3.2 配置bean为非单例1.1.…...

西方网络安全人才培养的挑战及对策

文章目录 前言一、网络安全人才力量发展现状(一)注重从战略上重视网络安全人才培养和发展。(二)注重从多渠道多路径招募网络安全人才。(三)注重分层次分阶段系统规划网络安全人才培养模式。(四)注重通过实践锻炼进一步提升网络攻防实战能力。二、网络安全人才面临的形势…...

计算机网络之三次握手,四次挥手

TCP(传输控制协议)是一种面向连接的、可靠的传输层协议,用于在网络中的两个应用程序之间建立可靠的通信连接。TCP的核心特征之一是它使用“三次握手”过程来建立连接,以及“四次挥手”过程来终止连接。 三次握手(建立…...

深度强化学习(王树森)笔记09

深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…...

调试OpenHarmony应用/服务

调试流程 DevEco Studio提供了丰富的OpenHarmony应用/服务调试能力,帮助开发者更方便、高效的调试应用/服务。 OpenHarmony应用/服务调试支持使用真机设备调试。使用真机设备进行调试前,需要对HAP进行签名后进行调试。详细的调试流程如下图所示&#x…...

【NGINX】NGINX如何阻止指定ip的请求

业务场景: web页面做了一个功能,在websocket请求失败的情况,会定时向服务端进行重试进行建立连接。 存在的问题是即使这个web系统没人操作的情况下,只要页面没有关闭,即使系统超时了页面也没有发生跳转,这…...

PHP抽奖设置中奖率,以及防高并发

一、中奖率,先在后台设定好奖项名称,抽奖份数,以及中奖百分比 奖品表draw 二、 借助文件排他锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说明有其他订单正在处理,此时要么等待要么直接提示用户"服务器繁忙" 阻塞(等待)模式,一般都是用这个模…...

使用.NET6 Avalonia开发跨平台三维应用

本文介绍在Vistual Studio 2022中使用Avalonia和集成AnyCAD Rapid AvaloniaUI三维控件的过程。 0 初始化环境 安装Avalonia.Templates dotnet new install Avalonia.Templates若之前安装过可忽略此步骤。 1 创建项目 选择创建AvaloniaUI项目 选一下.NET6版本和Avalonia版…...

linux(ubuntu)中crontab定时器命令详解 以及windows中定时器

文章目录 linux(ubuntu)中crontab定时器命令详解基本语法crontab 文件格式通配符示例在Ubuntu中,定时任务cron服务默认被安装。可以通过以下命令操作该服务:其他注意事项windows中定时器任务的创建步骤:常规触发器操作…...

植物病害检测YOLOV8,OPENCV调用

【免费】植物病害检测,10种类型,YOLOV8训练,转换成ONNX,OPENCV调用资源-CSDN文库 植物病害检测,YOLOV8NANO,训练得到PT模型,然后转换成ONNX,OPENCV的DNN调用,支持C,PYTH…...

C++初阶:入门泛型编程(函数模板和类模板)

大致介绍了一下C/C内存管理、new与delete后:C初阶:C/C内存管理、new与delete详解 我们接下来终于进入了模版的学习了,今天就先来入门泛型编程 文章目录 1.泛型编程2.函数模版2.1概念2.2格式2.3函数模版的原理2.4函数模版的实例化2.4.1隐式实例…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...