数据库的DDL,DCL,DML

本文详细介绍了数据库语言中的三种主要语言:数据定义语言(DDL),用于创建、删除和修改数据库对象;数据操作语言(DML),用于插入、更新和删除数据记录;数据控制语言(DCL),用于管理用户权限。
 

DML(Data manipulation language):数据操作语言,主要有select,insert,update,delete等,对数据库进行操作的语言。

DDL(Data define language):数据定义语言,主要有create,alert,drop等,更改数据表的结构、数据类型、表之间的连接和约束等。

DCL(Data control language):数据控制语言,主要有grant,revoke,deny等,更改数据库用户或者角色的权限。

 

 

1、DDL

  • 1-1、DDL的概述

DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:Create创建数据表,Alter可以更改该表的字段,Drop可以删除这个表,从这里我们可以看到,DDL所站的高度,他不会对具体的数据进行操作。

  • 1-2、DDL的主要语句(操作)

Create语句:可以创建数据库和数据库的一些对象。

Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。

Alter语句:修改数据表定义及属性。

  • 1-3、DDL的操作对象(表)
    • 1-3-1、表的概念

表的创建就是用来存放数据用的,由于我们存放的数据的不通,所以我们需要定义些数据类型,以方便管理。

    • 1-3-2、表的属性

主键属性:主键就是主键约束,只不过起的名字不同了,主键的起名偏向于虚的(就是描述描述这件事),主键约束起名偏向于实得(就是描述操作的实施),描述的都是同一件事,主键约束就是表中的一个属性;在一个表中最多可以有一个主键;一个主键可以定义在一个或多个字段;主键使一个或多个字段的值必须唯一且不为空,这样做可以通过该字段或该组字段中的值唯一的代表一条记录。

唯一属性:一个表中只能有一个主键属性,为了方表用户,提出唯一约束;唯一约束可以定义在一个或多个字段上;唯一约束使该字段或该组字段中的值唯一,可以为空,但是,不能重复。

外键属性:又叫外键,又叫外键约束,跟主键和主键约束的关系是一样的;外键约束针对的两个表,如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表,但要注意,必须要计算机要知道你是这种关系。

核查、Null和缺省属性:核查属性又叫核查约束,Null属性又叫Null约束,缺省属性又叫缺省约束;这些名称是描述一件事,描述一种情况,这件事或这张情况我们当然可以人为的那样特意做(输入数据是注意就行),但是,他们的本意是实现自动化,也就是让计算机做这件事。

(你知道为什么建立主键和唯一约束的时候,会自动的创建索引吗?而且是唯一索引,想一想索引大多在那些字段上用,以及索引的作用就会知道了。像主键约束、唯一约束、非空约束、外键约束、核查约束和缺省约束这些操作都是使表具有某些特性,所以在这里我认为他们都是表的属性。)

2、DML

  • 2-1、DML的概述

DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。

  • 2-2、DML的主要语句(操作)

Insert语句:向数据表张插入一条记录。

Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。

Update语句:用于修改已存在表中的记录的内容。

  • 2-3、DML的操作对象——记录
    • 2-3-1、注意

当我们对记录进行Insert、Delete和Update操作的时候,一定要注意,一定要清楚DDL对其的一些操作。

3、DCL

  • 3-1、DCL的概述

DCL(Data Control Language 数据控制语句)的操作是数据库对象的权限,这些操作的确定使数据更加的安全。

  • 3-2、DCL的主要语句(操作)

Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。

Revoke语句:可以废除某用户或某组或所有用户访问权限

  • 3-3、DCL的操作对象(用户)

此时的用户指的是数据库用户。

<think>好的,用户现在问的是数据库中的DCLDDLDML这些术语。我需要先确认自己对这些概念的理解是否正确,然后组织一个清晰的解释方式。 首先,DCL是数据控制语言,主要涉及权限管理,比如GRANT和REVOKE。DDL是数据定义语言,用于创建和修改数据库结构,比如CREATE、ALTER、DROP。DML是数据操作语言,用于数据的增删改查,比如SELECT、INSERT、UPDATE、DELETE。还有DQL,虽然有时候被归入DML,但有时候单独提出来,比如SELECT查询。 接下来要思考用户可能的背景。用户可能刚开始学习数据库,或者在工作中遇到了这些术语需要理解。他们可能需要明确的定义、例子以及这些语言的区别和应用场景。需要确保解释足够详细,但不过于技术化,让初学者也能理解。 用户之前的问题是关于垃圾回收算法,现在转向数据库,可能是在学习编程或系统设计的相关知识。这时候需要结构化的回答,可能比较喜欢对比和分类,比如表格或者分点说明。 需要检查是否有遗漏的部分。比如TCL(事务控制语言)如COMMIT和ROLLBACK,虽然用户没提到,但通常在讨论数据库语言时会一起提到,所以可能需要补充进去,让回答更全面。 另外,要确保用中文解释,避免使用复杂术语,必要时举例说明。比如,DDL操作数据库结构,可以举例创建表;DML操作数据,举例插入数据;DCL管理权限,举例授权用户访问。 还要注意不同数据库系统(如MySQL、Oracle)可能会有细微差别,但通用概念是一致的。是否需要提到这一点?可能简要说明,避免混淆。 最后,总结这些语言的作用和区别,帮助用户形成整体理解。可能用表格对比,或者分点总结,让信息更清晰。</think>以下是数据库操作语言的分类解析,通过分层结构展示核心概念与应用场景: --- ### **核心语言类型对比** | 类型 | 全称 | 功能定位 | 典型语句 | 操作对象 | 事务影响 | |------|----------------------|--------------------|---------------------------|------------------|-----------| | DDL | 数据定义语言 | 结构管理 | `CREATE`/`ALTER`/`DROP` | 数据库、表、索引 | 自动提交 | | DML | 数据操作语言 | 数据操作 | `SELECT`/`INSERT`/`UPDATE`| 表记录 | 需显式提交| | DCL | 数据控制语言 | 权限管理 | `GRANT`/`REVOKE` | 用户与权限 | 立即生效 | | TCL | 事务控制语言 | 事务管理 | `COMMIT`/`ROLLBACK` | 事务单元 | 控制提交 | --- ### **分层详解** #### **1. DDL(数据定义语言)** - **核心功能** - 创建/修改/删除数据库结构对象 - 定义约束(主键、外键、唯一性等) - 建立索引优化查询性能 - **典型场景** ```sql -- 建表语句示例 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, salary DECIMAL(10,2), INDEX idx_name (name) ); -- 修改表结构 ALTER TABLE employees ADD COLUMN department_id INT; -- 删除索引 DROP INDEX idx_name ON employees; ``` - **注意事项** - 执行后自动提交事务(Oracle等数据库) - 生产环境慎用`DROP`语句 --- #### **2. DML(数据操作语言)** - **核心功能** - 对表中数据进行增删改查 - 处理业务数据流转 - 支持事务控制 - **典型场景** ```sql -- 插入新记录 INSERT INTO employees VALUES (101, '张三', 15000.00, 3); -- 更新数据 UPDATE employees SET salary = salary*1.1 WHERE department_id = 3; -- 条件删除 DELETE FROM employees WHERE id = 101; -- 查询数据(DQL子集) SELECT name, salary FROM employees WHERE salary > 10000; ``` - **事务特性** - 需要显式`COMMIT`提交变更 - 支持`ROLLBACK`回滚操作 --- #### **3. DCL(数据控制语言)** - **权限管理维度** ```mermaid graph TD A[用户] --> B{权限类型} B --> C[对象权限] B --> D[系统权限] C --> E[SELECT/INSERT...] D --> F[CREATE TABLE...] ``` - **典型操作** ```sql -- 授予查询权限 GRANT SELECT ON employees TO user_dev; -- 收回删除权限 REVOKE DELETE ON employees FROM user_test; -- 创建角色授权 CREATE ROLE data_auditor; GRANT SELECT ON ALL TABLES TO data_auditor; ``` - **安全原则** - 最小权限原则(Principle of Least Privilege) - 定期审查权限分配 --- #### **4. TCL(事务控制语言)** - **ACID特性保障** ```sql START TRANSACTION; UPDATE accounts SET balance = balance - 1000 WHERE user_id = 1; UPDATE accounts SET balance = balance + 1000 WHERE user_id = 2; -- 显式提交或回滚 COMMIT; -- 或 ROLLBACK; ``` - **隔离级别影响** | 级别 | 脏读 | 不可重复读 | 幻读 | |------------------|------|------------|------| | Read Uncommitted | ✓ | ✓ | ✓ | | Read Committed | × | ✓ | ✓ | | Repeatable Read | × | × | ✓ | | Serializable | × | × | × | --- ### **现代演进趋势** 1. **DDL增强** - 在线DDL(MySQL 5.6+ 支持不锁表修改结构) - 自动分区管理(PostgreSQL 10+ 声明式分区) 2. **DML扩展** - JSON类型支持(`SELECT data->>'$.name'`) - 窗口函数(`ROW_NUMBER() OVER(PARTITION BY dept)`) 3. **DCL精细化** - 行级安全控制(PostgreSQL RLS) - 动态数据脱敏(Oracle Data Redaction) --- ### **最佳实践建议** 1. **开发规范** - DDL变更需通过版本控制(Liquibase/Flyway) - 批量DML操作使用预编译语句防SQL注入 2. **权限管理** - 生产环境禁止使用超级用户账号运行应用 - 采用RBAC(基于角色的访问控制)模型 3. **事务优化** - 避免长事务导致锁竞争 - 合理设置事务隔离级别 --- 通过理解这些语言的分工与协作,可以更规范地进行数据库设计与开发。实际工作中建议结合具体数据库(MySQL/Oracle/SQL Server)的文档进行差异点学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值