

一篇文章,彻底理解数据库操作语言:DDL、DML、DCL、TCL
source link: https://www.51cto.com/article/780665.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近与开发和运维讨论数据库账号及赋权问题时,发现大家对DDL和DML两个概念并不了解。于是写一篇文章,系统的整理一下在数据库领域中的DDL、DML、DQL、DCL的使用及区别。
通常,数据库SQL语言共分为四大类:数据定义语言DDL,数据操作语言DML,数据查询语言DQL,数据控制语言DCL。再加上事务控制语言TCL,一个共5个。
下面,我们就详细了解一下它们。
数据定义语言DDL
DDL(Data Definition Language)是数据定义语言,它用于定义或改变数据库或表的结构等初始化工作上。通常,包括数据类型、表(Table)之间的关系以及数据库(Database)中的约束、索引、视图、存储过程、触发器等。
DDL命令通常用于创建数据库模式,例如CREATE
、ALTER
、DROP
、TRUNCATE
、RENAME
、COMMENT
等。这些命令一旦执行,就无法被撤销,因为它们改变了数据库的结构。
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命令不会自动提交,而且是可以回滚操作。
常用的语句关键字有:SELECT
、INSERT
、UPDATE
、DELETE
、MERGE
、CALL
、EXPLAIN PLAN
、LOCK 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)等字段:
- 查询所有数据:
SELECT * FROM Students;
这条命令会返回Students表中的所有行和列。
- 查询部分字段:
SELECT Name, Age FROM Students;
这条命令仅返回Name和Age字段的数据。
- 对查询结果进行筛选:
SELECT * FROM Students WHERE Age > 18;
这条命令只返回年龄大于18的学生数据。
- 对查询结果进行排序:
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可能有所不同,但分类思想和功能基本相同。在上述英文缩写的记忆中,建议通过英文原文,特别是中间的英文字母来辅助记忆。
Recommend
-
129
1、Q-learning例子 假设有这样的房间 如果将房间表示成点,然后用房间之间的连通关系表示成线,如下图所示: 这就是房间对应的图。我们首先将agent(机器人)处于任何一个位置,让他自己走动,直到走到5房间,表示成功。为了能够走出去,我们将每个节点之间设置一...
-
30
在前面几篇文章中我们已经学会了如何了编写Spider去获取网页上所有的文章链接及其对应的网页目标信息。在这一篇文章中,我们将主要介绍Scrapy中的Item。 在介绍Item之前,我们需要知道明确一点,网络爬虫的主要目标就...
-
20
编辑推荐: 在如今的分布式盛行的时代,分布式事务永远都是绕不开的一个话题,本文主要就谈谈分布式事务相关的一致性与实战解决方案。 来自于csdn,,由火龙果软件Anna编辑、推荐。
-
7
一篇文章,彻底搞懂品牌出海新玩法谷仓新国货研究院36分钟前近年来,中国品牌处于“出海”新风口,品牌出海越来越火。据统计,2020年出口总额约占GDP的15%,而且这个比例每年...
-
5
今天我就来聊聊 Kafka 的存储系统架构设计,说到存储系统,大家可能对 MySQL 比较熟悉,也知道 MySQL 是基于 B+ tree 来作为它的索引数据结构。Kafka 又是基于什么机制来存储?为什么要设计成这样?它解决了什么问题?又是如何解决的?...
-
7
Cookie是什么 cookie的中文翻译是曲奇,小甜饼的意思。cookie其实就是一些数据信息,类型为“小型文本文件”,存储于电脑上的文本文件中。 Cookie有什么用 我们想象一个场景,当我们打开一...
-
9
框架的意义 对于程序员来说,我们通常知道很多概念,例如组件、模块、系统、框架、架构等,而本文我们重点说...
-
5
说起做抖音,总会听到一个词,账号定位!而且很多人会说这个非常非常重要。 那到底什么是账号定位呢?怎么做好账号定位呢? 简单来说就是我们做一...
-
3
万能的ChatGPT真有智能了么?一篇文章让你彻底搞懂ChatGPT-人类是怎么训练出了一只聪明的莎士比亚的猴子 - Tinyfool的个人网站 跳至...
-
10
理解树状数组这一篇文章就够啦 - Cattle_Horse - 博客园 TODO: 二维树状数组 维护...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK