最近与开发和运维讨论数据库账号及赋权问题时,发现大家对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)等字段:
这条命令会返回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可能有所不同,但分类思想和功能基本相同。在上述英文缩写的记忆中,建议通过英文原文,特别是中心的英文字母来辅助记忆。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |