0%

关系分类

SQL 关系分类与语言分类详解

SQL(结构化查询语言)是操作关系型数据库的标准语言,其体系可从关系类型语言功能两个维度进行分类。理解这些分类有助于清晰把握 SQL 的核心功能和应用场景。

SQL 关系分类(数据存储形式)

SQL 中涉及的 “关系” 本质上是二维表结构,根据存储方式和生命周期可分为三类:

1. 表(Table):物理存储的基础关系

  • 定义:数据库中永久存储的二维表,包含行(记录)和列(字段),是数据的物理载体。

  • 特性:

    • 独立存在于数据库中,数据持久化存储在磁盘上。
    • 支持 INSERTUPDATEDELETE 等操作修改数据。
    • 结构由 CREATE TABLE 定义,可通过 ALTER TABLE 修改。
  • 示例:

    1
    2
    3
    4
    5
    -- 创建表(物理存储)
    CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
    );

2. 视图(View):逻辑定义的虚拟关系

  • 定义:由 SELECT 查询定义的虚拟表,不实际存储数据,仅保存查询逻辑,使用时动态计算结果。

  • 特性:

    • 数据依赖于基础表(视图的数据源),基础表数据变化会实时反映到视图。
    • 可简化复杂查询(将多表关联逻辑封装为视图),并限制用户访问范围(如隐藏敏感字段)。
    • 支持 SELECT 操作,部分视图可通过 INSERT/UPDATE/DELETE 修改(需满足特定条件,如基于单表且包含主键)。
  • 示例:

    1
    2
    3
    -- 创建视图(逻辑定义,不存储数据)
    CREATE VIEW active_users AS
    SELECT id, name FROM users WHERE status = 1;

3. 临时表(Temporary Table):会话级的临时关系

  • 定义:在查询执行或会话期间临时创建的表,用于存储中间结果,会话结束或事务提交后自动删除。

  • 特性:

    • 仅在当前会话可见,不同会话的临时表互不干扰。
    • 适合处理复杂查询中的中间数据(如多步计算、大数据量过滤)。
    • MySQL 中以 #TEMPORARY 关键字标识,如 CREATE TEMPORARY TABLE temp_data ...
  • 示例:

    1
    2
    3
    -- 创建临时表(会话结束后自动删除)
    CREATE TEMPORARY TABLE temp_orders AS
    SELECT user_id, SUM(amount) FROM orders GROUP BY user_id;

SQL 语言分类(按功能)

根据操作目的,SQL 可分为五类,涵盖从数据查询到权限控制的全流程:

1. 数据查询语言(DQL:Data Query Language)

  • 功能:从表或视图中检索数据。

  • 核心语句SELECT

  • 示例:

    1
    SELECT id, name FROM users WHERE age > 18;  -- 查询18岁以上用户

2. 数据操作语言(DML:Data Manipulation Language)

  • 功能:修改表中的数据(新增、更新、删除)。

  • 核心语句INSERTUPDATEDELETE

  • 特性:操作默认在事务中,可通过 ROLLBACK 回滚,需 COMMIT 提交生效。

  • 示例:

    1
    2
    3
    INSERT INTO users (id, name) VALUES (1, '张三');  -- 新增
    UPDATE users SET age = 20 WHERE id = 1; -- 更新
    DELETE FROM users WHERE status = 0; -- 删除

3. 数据定义语言(DDL:Data Definition Language)

  • 功能:定义或修改数据库对象(表、视图、索引等)的结构。

  • 核心语句CREATEALTERDROPTRUNCATE

  • 特性:操作自动提交(隐式事务),无法通过 ROLLBACK 回滚,需谨慎执行。

  • 示例:

    1
    2
    3
    4
    CREATE TABLE products (id INT);  -- 创建表
    ALTER TABLE products ADD price DECIMAL; -- 修改表结构
    DROP VIEW active_users; -- 删除视图
    TRUNCATE TABLE logs; -- 清空表数据(保留结构)

4. 数据控制语言(DCL:Data Control Language)

  • 功能:管理数据库权限(授权、撤销权限)。

  • 核心语句GRANTREVOKE

  • 示例:

    1
    2
    GRANT SELECT ON users TO 'user1'@'localhost';  -- 授权查询权限
    REVOKE UPDATE ON users FROM 'user1'@'localhost'; -- 撤销更新权限

5. 事务控制语言(TCL:Transaction Control Language)

  • 功能:管理事务的提交、回滚和保存点,确保数据一致性。

  • 核心语句COMMITROLLBACKSAVEPOINT

  • 示例:

    1
    2
    3
    4
    BEGIN;  -- 开始事务
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;
    COMMIT; -- 提交事务(若出错则执行 ROLLBACK)

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10