当前位置: 首页 > 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隐式实例…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...