DDL、DML、DCL区分与说明

本文深入解析了SQL语言的三个核心组件:DDL(数据定义语言)、DML(数据操作语言)和DCL(数据控制语言)。详细介绍了每种语言的作用、常见命令及应用范围,为初学者提供了全面的SQL语言入门指南。

DDL: Data Definition Language,数据定义语言,简单概括就是,对数据对象操作的命令,比如说对数据库对象进行创建、修改、删除等,有create,alter,drop,trancate。

数据库对象:

常见的比如,表,表空间,视图,物化视图,索引,函数,包,存储过程,序列,触发器,同义词等,在oracle数据库中,定义的数据库对象共有47中,记录在dba_objects视图中,可以使用以下命令获得对象的清单:

select distinct object_type from dba_objects;

数据库的对象中有一部分是通过段来存储数据库的,共有12种段类型,比如,表,索引,LOB等

DML: Data Manipulation Language,数据操作语言,是我们初步学习sql语言时使用最多的语言,是真正对数据进行操作的语言,比如插入数据,删除数据,查询数据等,有insert,delete,select,update。

DCL:Data Control Language,数据控制语言,主要是作用在用户上,比如创建用户,用户授权,修改密码等,有create,grant,revoke,alter等,有部分操作和DDL有重合,但是,主要的区别方式在于操作的对象。

上述三种语言中,DML的复杂程度做高,主要是因为select中的各种语法,函数实在丰富。本文不再赘述,可以去oracle官网或者w3cschool网站查看,算是sql语句编写的基础只是。

<think> 我们正在讨论DDLDMLDCL的含义、作用及使用方法。以下是基于用户提供的引用和一般知识的整理: 引用[1]中提到了DDL/DML/DCL的区别概述,并特别指出在建立主键和唯一约束时会自动创建索引(唯一索引),这是因为索引的作用(提高查询速度)和约束(保证数据唯一性)的需求。同时,引用[1]还提到主键约束、唯一约束、非空约束、外键约束、核查约束和缺省约束都是表的属性。 引用[2]则从Oracle的角度说明DDLDMLDCL的区别,特别是权限控制方面,比如delete和drop的区别(delete是DML,删除表中的行;drop是DDL,删除整个表结构)。 以下是对DDLDMLDCL的详细解释: ### 一、DDL(数据定义语言) **定义**:用于定义和管理数据库对象(如表、索引、视图等)的结构。 - **主要命令**: - `CREATE`:创建数据库对象(如表、索引、视图等) - `ALTER`:修改数据库对象的结构 - `DROP`:删除数据库对象 - `TRUNCATE`:删除表中所有数据(保留表结构,不可回滚) - `RENAME`:重命名对象 - `COMMENT`:添加注释 **特点**: - 执行后自动提交(隐式提交),不能回滚(除个别数据库如MySQL的某些DDL支持事务)。 - 通常需要较高的权限。 - 会自动提交当前事务(在Oracle中,DDL执行前会隐式提交前面未提交的事务)。 **示例**: ```sql -- 创建表 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100), age INT ); -- 修改表结构(添加列) ALTER TABLE employees ADD salary DECIMAL(10,2); -- 删除表 DROP TABLE employees; -- 清空表数据(快速删除所有行) TRUNCATE TABLE employees; ``` > **注意**:`TRUNCATE``DELETE`(DML)的区别: > - `TRUNCATE`是DDL,删除所有数据且不可回滚,速度快(不记录日志)。 > - `DELETE`是DML,可带条件删除部分数据,可回滚,速度较慢(记录日志)[^2]。 ### 二、DML(数据操纵语言) **定义**:用于操作数据库中的数据(增删改查)。 - **主要命令**: - `SELECT`:查询数据 - `INSERT`:插入新数据 - `UPDATE`:更新现有数据 - `DELETE`:删除数据 - `MERGE`:合并数据(插入或更新) **特点**: - 需要显式提交(如`COMMIT`)或回滚(`ROLLBACK`)。 - 操作单位是表中的记录。 - 可通过`WHERE`子句指定条件。 **示例**: ```sql -- 插入数据 INSERT INTO employees (id, name, age) VALUES (1, '张三', 30); -- 更新数据 UPDATE employees SET age = 31 WHERE name = '张三'; -- 删除数据(删除指定行) DELETE FROM employees WHERE id = 1; -- 查询数据 SELECT * FROM employees WHERE age > 25; ``` ### 三、DCL(数据控制语言) **定义**:用于控制数据库访问权限和安全。 - **主要命令**: - `GRANT`:授予用户权限 - `REVOKE`:撤销用户权限 - `DENY`:拒绝权限(SQL Server特有) **特点**: - 涉及用户权限管理,如对表、视图、存储过程的访问权限。 - 权限类型包括:`SELECT`、`INSERT`、`UPDATE`、`DELETE`、`EXECUTE`等。 **示例**: ```sql -- 授予用户user1对employees表的SELECT权限 GRANT SELECT ON employees TO user1; -- 授予用户user2对employees表的INSERT、UPDATE权限 GRANT INSERT, UPDATE ON employees TO user2; -- 撤销用户user1的SELECT权限 REVOKE SELECT ON employees FROM user1; ``` --- ### 关键区别总结 | 特性 | DDL | DML | DCL | |------------|--------------------------|------------------------------|--------------------------| | **作用** | 定义/修改数据库结构 | 操作数据记录 | 控制访问权限 | | **命令** | `CREATE`, `ALTER`, `DROP` | `SELECT`, `INSERT`, `UPDATE`, `DELETE` | `GRANT`, `REVOKE` | | **提交** | 自动提交 | 需显式提交(除非自动提交模式) | 自动提交 | | **回滚** | 不可回滚 | 可回滚 | 不可回滚 | | **示例** | 建表、删表 | 增删改查数据 | 授权、撤销权限 | ### 附加说明:索引约束的关系 - **主键约束**和**唯一约束**会自动创建唯一索引(如Oracle的`B树索引`),用于快速查找和保证唯一性[^1]。 - **外键约束**通常也会创建索引,以提高关联查询效率(但非强制,建议手动创建)。 --- §§相关问题§§ 1. 在哪些场景下使用`TRUNCATE`比`DELETE`更合适? 2. `GRANT`和`REVOKE`命令如何实现权限的级联控制? 3. 数据库事务中DDL操作会导致哪些隐式行为? 4. 如何通过DCL命令实现数据库审计功能? 5. 为什么外键约束通常需要手动创建索引? </think> ### DDLDMLDCL 详解 #### 一、DDL(数据定义语言) **定义**:用于定义和管理数据库对象(如表、索引、视图等)的结构。 **核心命令**: - `CREATE`:创建数据库对象 ```sql CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); ``` - `ALTER`:修改对象结构 ```sql ALTER TABLE users ADD age INT; -- 添加列 ``` - `DROP`:删除对象 ```sql DROP TABLE users; -- 删除表 ``` - `TRUNCATE`:清空表数据(保留结构) - `COMMENT`:添加注释 **特点**: 1. **自动提交**:执行后立即生效,不可回滚(如`CREATE TABLE`)[^1][^2] 2. **隐式创建索引**:定义主键(`PRIMARY KEY`)或唯一约束(`UNIQUE`)时,数据库自动创建唯一索引以加速查询和保证数据唯一性[^1] 3. **权限要求高**:需数据库管理员权限 --- #### 二、DML(数据操纵语言) **定义**:用于操作数据库中的数据记录。 **核心命令**: - `SELECT`:查询数据 ```sql SELECT * FROM users WHERE age > 18; ``` - `INSERT`:插入数据 ```sql INSERT INTO users (id, name) VALUES (1, 'Alice'); ``` - `UPDATE`:更新数据 ```sql UPDATE users SET age = 20 WHERE id = 1; ``` - `DELETE`:删除数据 ```sql DELETE FROM users WHERE age < 18; -- 删除行,可回滚 ``` **特点**: 1. **需显式提交**:执行后需`COMMIT`才能持久化(可回滚) 2. **操作单位**:记录级(行) 3. **DDL本质区别**: - `DELETE`(DML):删除行,可恢复 - `DROP`(DDL):删除整个表,不可恢复[^2] --- #### 三、DCL(数据控制语言) **定义**:控制数据库访问权限和安全。 **核心命令**: - `GRANT`:授予权限 ```sql GRANT SELECT, INSERT ON users TO user1; -- 授权查询和插入 ``` - `REVOKE`:撤销权限 ```sql REVOKE DELETE ON users FROM user1; -- 撤销删除权限 ``` - `DENY`:禁止权限(特定数据库如SQL Server) **使用场景**: 1. 控制用户对表的操作权限(如禁止删除) 2. 管理角色权限(如创建只读用户组) --- ### 关键区别总结 | 特性 | DDL | DML | DCL | |--------------|--------------------------|------------------------------|--------------------------| | **作用对象** | 数据库结构(表、索引等) | 数据记录(行) | 访问权限 | | **提交方式** | 自动提交 | 需显式提交(`COMMIT`) | 自动提交 | | **回滚** | 不可回滚 | 可回滚(`ROLLBACK`) | 不可回滚 | | **典型命令** | `CREATE`, `ALTER`, `DROP` | `SELECT`, `INSERT`, `DELETE` | `GRANT`, `REVOKE` | ### 索引约束的关系 - **自动索引创建**:定义`PRIMARY KEY`或`UNIQUE`约束时,数据库自动生成唯一索引以: 1. 快速定位数据 2. 强制保证数据唯一性 3. 加速关联查询(如`JOIN`)[^1] - **索引使用场景**: ```sql -- 在WHERE子句常用字段上创建索引 CREATE INDEX idx_age ON users(age); -- 索引可显式创建(非约束字段) SELECT * FROM users WHERE age > 20; -- 使用idx_age加速 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hannah_JK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值