SQL语言全解析:掌握DDL, DML, DQL, TCL, DCL 的核心概念与实践

SQL语言全解析:掌握DDL, DML, DQL, TCL, DCL 的核心概念与实践

  • 数据定义语言 (DDL) : Data Definition Language
  • 数据操纵语言 (DML) : Data Manipulation Language
  • 数据查询语言 (DQL) : Data Query Language
  • 事务控制语言 (TCL) : Transaction Control Language
  • 数据控制语言 (DCL) : Data Control Language

1. 数据定义语言 (DDL - Data Definition Language)

  • 核心作用: 定义数据库的结构和模式(Schema)。DDL 命令用于创建、修改和删除数据库中的对象,如表(Tables)、索引(Indexes)、视图(Views)、存储过程(Stored Procedures)等。
  • 关键命令 : CREATE (创建), ALTER (修改), DROP (删除), TRUNCATE (截断表), RENAME (重命名)。
  • 重要性: 确保数据库结构的逻辑和物理一致性,是数据库设计的基础。它定义了数据的蓝图。

示例:创建一个名为 Employees 的表

sql 复制代码
-- 创建表 (CREATE TABLE)
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,          -- 员工ID,作为主键,唯一标识每个员工
    FirstName VARCHAR(50) NOT NULL,      -- 名字,字符串类型,不能为空
    LastName VARCHAR(50) NOT NULL,       -- 姓氏,字符串类型,不能为空
    Department VARCHAR(50),              -- 部门,字符串类型,允许为空
    HireDate DATE,                       -- 雇佣日期,日期类型
    Salary DECIMAL(10, 2)                -- 薪资,小数点后保留2位的十进制数
);

-- 向表中添加新列 (ALTER TABLE)
ALTER TABLE Employees
ADD Email VARCHAR(100) UNIQUE;          -- 添加电子邮件列,要求唯一

-- 修改现有列的属性 (ALTER TABLE)
ALTER TABLE Employees
MODIFY Department VARCHAR(100);         -- 修改部门列的长度为100

-- 删除表中的列 (ALTER TABLE)
ALTER TABLE Employees
DROP COLUMN HireDate;                   -- 删除雇佣日期列

-- 删除整个表 (DROP TABLE)
-- DROP TABLE Employees;                 -- 请谨慎执行此操作,它会删除所有数据和结构

-- 清空表中所有数据 (TRUNCATE TABLE)
-- TRUNCATE TABLE Employees;             -- 比DELETE更快,但不能回滚,且会重置自增ID
  • 使用场景:

    • 数据库设计与部署 : 在项目启动时,使用 CREATE DATABASE 创建新的数据库,使用 CREATE TABLE 定义表的结构、列名、数据类型和约束。
    • 结构调整 : 当业务需求变化时,使用 ALTER TABLE 来添加新字段、修改字段类型或删除不再需要的字段。
    • 对象清理 : 在不再需要某个表或视图时,使用 DROP 来移除它们,释放资源。
    • 批量数据清理 : 需要快速清空一个大表的数据并重置自增ID时,TRUNCATE 是高效的选择。

2. 数据操纵语言 (DML - Data Manipulation Language)

  • 核心作用: 管理存储在数据库表中的实际数据。DML 命令用于插入、更新和删除数据记录。
  • 关键命令 : INSERT (插入), UPDATE (更新), DELETE (删除)。
  • 重要性: 直接影响数据库中的数据内容,是应用层与数据库交互的核心部分。它负责数据的增删改操作。

示例:操作 Employees 表中的数据

sql 复制代码
-- 插入新员工记录 (INSERT INTO)
INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Email, HireDate)
VALUES (101, 'Alice', 'Smith', 'Sales', 'alice.smith@example.com', '2023-01-15');

INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Email, HireDate)
VALUES (102, 'Bob', 'Johnson', 'IT', 'bob.johnson@example.com', '2023-02-20');

-- 更新现有员工的薪资 (UPDATE)
UPDATE Employees
SET Salary = 60000.00
WHERE EmployeeID = 101;                 -- 只更新EmployeeID为101的记录

-- 更新所有员工的部门 (UPDATE - 谨慎使用)
-- UPDATE Employees
-- SET Department = 'Unknown';            -- 更新所有记录

-- 删除特定员工的记录 (DELETE)
DELETE FROM Employees
WHERE EmployeeID = 102;                 -- 只删除EmployeeID为102的记录

-- 删除部门为 'Sales' 的所有员工 (DELETE - 谨慎使用)
-- DELETE FROM Employees
-- WHERE Department = 'Sales';            -- 删除所有Sales部门的员工
  • 使用场景:

    • 数据录入 : 业务系统接收用户注册信息、订单数据等时,使用 INSERT 语句将数据存入数据库。
    • 数据维护 : 当用户的地址信息变更或订单状态更新时,使用 UPDATE 语句来修改现有记录。
    • 数据清理/归档 : 需要移除过期的日志记录、用户数据或处理完结的订单时,使用 DELETE
    • 数据同步/处理 : 在数据处理流程中,根据特定条件对数据进行更新或插入,MERGE 语句可以简化逻辑。

3. 数据查询语言 (DQL - Data Query Language)

  • 核心作用: 从数据库中检索(查询)数据。DQL 命令用于提取符合特定条件的数据集合,而不会修改数据本身。
  • 关键命令 : SELECT (选择/查询)。
  • 重要性: 提供数据访问和信息提取能力,是数据库的主要用途之一,支撑数据分析和业务报告。它使我们能够高效地获取所需信息。

示例:查询 Employees 表中的数据

sql 复制代码
-- 查询所有员工的所有信息 (SELECT)
SELECT *
FROM Employees;

-- 查询特定员工的名字和部门
SELECT FirstName, Department
FROM Employees
WHERE EmployeeID = 101;

-- 查询所有在 'IT' 部门工作的员工
SELECT EmployeeID, FirstName, LastName, Salary
FROM Employees
WHERE Department = 'IT';

-- 查询薪资高于 55000 的员工
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > 55000;

-- 对查询结果进行排序
SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC;                   -- 按薪资降序排列
  • 使用场景:

    • 信息检索 : 用户浏览产品列表、查看个人账户详情、搜索特定信息时,后台都通过 SELECT 语句从数据库中获取数据并展示。
    • 报表生成 : 创建各类业务报表,统计销售额、用户活跃度等,都需要 SELECT 结合 GROUP BY, HAVING, ORDER BY 等子句。
    • 数据分析 : 数据分析师通过复杂的 SELECT 查询来探索数据模式、识别趋势。
    • 数据验证 : 在进行其他操作前,使用 SELECT 来验证特定数据的存在或状态。

4. 事务控制语言 (TCL - Transaction Control Language)

  • 核心作用: 管理数据库事务的执行,以保证数据的一致性和完整性(遵循 ACID 原则:Atomicity, Consistency, Isolation, Durability)。
  • 关键命令 : COMMIT (提交事务), ROLLBACK (回滚事务), SAVEPOINT (设置保存点)。
  • 重要性: 确保多条数据操作的原子性,防止因部分操作失败导致数据状态不一致。这对于维护数据的可靠性至关重要。

示例:在一个事务中执行 DML 操作

sql 复制代码
-- 开始一个事务 (隐式或显式 START TRANSACTION)
START TRANSACTION;

-- 插入一条新记录
INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, Email, HireDate, Salary)
VALUES (103, 'Charlie', 'Brown', 'HR', 'charlie.b@example.com', '2023-03-10', 50000.00);

-- 更新另一条记录
UPDATE Employees
SET Salary = 52000.00
WHERE EmployeeID = 101;

-- 如果一切正常,提交事务 (COMMIT)
-- COMMIT;

-- 如果在上述操作中发生错误或决定不保存更改,回滚事务 (ROLLBACK)
-- ROLLBACK;

-- 设置保存点,允许部分回滚 (SAVEPOINT)
SAVEPOINT before_update;

UPDATE Employees
SET Salary = 53000.00
WHERE EmployeeID = 101;

-- 如果需要撤销到保存点之前的状态
-- ROLLBACK TO SAVEPOINT before_update;

-- 最后提交事务
-- COMMIT;

注意:具体的 START TRANSACTION 语法可能因不同的数据库系统(如 MySQL, PostgreSQL, SQL Server, Oracle)而略有差异。在许多系统中,一旦执行了 DML 语句,就会自动开始一个事务,除非配置为自动提交。

  • 使用场景:

    • 保证数据一致性 : 例如,在银行转账场景中,一笔交易涉及从一个账户扣款和向另一个账户收款。需要将这两个操作放在一个事务中,使用 COMMIT 确保两者都成功;如果其中任何一个失败,使用 ROLLBACK 撤销已完成的操作,保持数据的一致性。
    • 部分回滚 : 在复杂事务中,可能只需要撤销最后几个步骤的操作,这时可以通过 SAVEPOINT 实现。

5. 数据控制语言 (DCL - Data Control Language)

  • 核心作用: 控制数据库用户的访问权限和对数据库对象的安全访问。它管理用户对数据的操作权限。
  • 关键命令 : GRANT (授予权限), REVOKE (撤销权限)。
  • 重要性: 实施数据安全策略,确保只有授权用户才能执行特定的数据库操作,防止数据泄露或未授权修改。它是数据安全保障的关键环节。

示例:授予和撤销用户权限

假设我们有一个名为 app_user 的数据库用户。

sql 复制代码
-- 授予用户对某个表的 SELECT 和 INSERT 权限 (GRANT)
GRANT SELECT, INSERT ON Employees TO 'app_user'@'localhost';

-- 授予用户对整个数据库的 ALL 权限
-- GRANT ALL PRIVILEGES ON mydatabase.* TO 'app_user'@'localhost';

-- 撤销用户对某个表的 UPDATE 和 DELETE 权限 (REVOKE)
REVOKE UPDATE, DELETE ON Employees FROM 'app_user'@'localhost';

-- 刷新权限使更改生效 (在某些数据库系统中是必需的,如 MySQL)
-- FLUSH PRIVILEGES;

注意:@'localhost' 表示该用户仅能从本地主机连接。用户账户和连接方式的语法在不同数据库系统中也可能有所不同。

  • 使用场景:

    • 权限管理 : 当新员工加入团队需要访问数据库时,使用 GRANT 为其分配必要的查询权限。
    • 安全加固 : 限制普通用户对敏感数据的修改权限,只允许只读访问 (GRANT SELECT)。
    • 角色管理: 创建不同的用户角色(如管理员、开发人员、只读用户),并为这些角色授予或撤销权限集,然后将用户分配到相应的角色。
    • 审计追踪: 管理员可以撤销不再需要的用户权限或不安全的权限。

相关推荐
lixia0417mul219 分钟前
使用Starrocks替换Clickhouse的理由
数据库
why技术1 小时前
也是出息了,业务代码里面也用上算法了。
java·后端·算法
张璐月1 小时前
mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
数据库·mysql·性能优化
沐尘而生2 小时前
【AI智能体】智能音视频-搭建可视化智能体
数据库·人工智能·ai作画·音视频·娱乐
白仑色2 小时前
完整 Spring Boot + Vue 登录系统
vue.js·spring boot·后端
NF禾凡3 小时前
【Mysql作业】
数据库·mysql
没有口袋啦3 小时前
NoSQL 介绍
数据库·nosql
菜鸟特工0073 小时前
Oracle 数据库 Dblink
数据库·oracle
可观测性用观测云3 小时前
AWS RDS PostgreSQL可观测性最佳实践
数据库
Kay_Liang4 小时前
MySQL SQL语句精要:DDL、DML与DCL的深度探究
开发语言·数据库·sql·mysql·database