MySQL 高级学习篇

发布于:2025-06-07 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、连结(Join)

1.1 概念

联结(Join)操作用于将多个表中的列组合在一起,形成一个新的查询结果集。它允许我们从多个表中提取数据,并基于表之间的关系进行查询。

1.2 类型

1. 内联结(INNER JOIN)
  • 定义:内联结返回两个表中满足连接条件的记录。

  • 示例

    SELECT student.name, score.grade
    FROM student
    INNER JOIN score ON student.id = score.student_id
    WHERE score.grade > 80;
2. 左联结(LEFT JOIN)

  • 定义:左联结返回左表中的所有记录,以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则结果中右表的字段将为 NULL。

  • 示例

    SELECT student.name, score.grade
    FROM student
    LEFT JOIN score ON student.id = score.student_id;
3. 右联结(RIGHT JOIN)

  • 定义:右联结返回右表中的所有记录,以及左表中满足连接条件的记录。如果左表中没有匹配的记录,左表的字段将为 NULL。

  • 示例

    SELECT student.name, score.grade
    FROM student
    RIGHT JOIN score ON student.id = score.student_id;
4. 外连接(OUTER JOIN)
  • 定义:外连接包括左外连接、右外连接和全外连接。全外连接返回左右表中所有记录,匹配则显示对应字段,不匹配则为 NULL。

  • 示例(全外连接)

    SELECT student.name, score.grade
    FROM student
    FULL OUTER JOIN score ON student.id = score.student_id;
5. 交叉连接(CROSS JOIN)
  • 定义:交叉连接返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合。

  • 示例

    SELECT department.dept_name, employee.name
    FROM department
    CROSS JOIN employee;

二、集合运算

2.1 概念

集合运算是以行为单位进行的操作,会影响记录行数,但不会改变列的数量。

2.2 类型

1. 并集(UNION)
  • 定义:并集返回两个查询结果集的合并,包含所有出现在第一个或第二个查询结果中的记录。

  • 语法

    SELECT column1, column2, ...
    FROM table1
    UNION [DISTINCT | ALL]
    SELECT col1, col2, ...
    FROM table2;
2. 交集(INTERSECT)
  • 定义:交集返回两个查询结果集中都包含的记录。

  • 语法

    SELECT column1, column2, ...
    FROM table1
    INTERSECT [DISTINCT | ALL]
    SELECT col1, col2, ...
    FROM table2;
3. 差集(EXCEPT)
  • 定义:差集返回出现在第一个查询结果中但不在第二个查询结果中的记录。

  • 语法

    SELECT column1, column2, ...
    FROM table1
    EXCEPT [DISTINCT | ALL]
    SELECT col1, col2, ...
    FROM table2;

三、数据完整性约束

3.1 主键(Primary Key)

  • 定义:用于唯一标识表中的每一行,具有唯一性和非空性。

  • 创建示例

    CREATE TABLE student (
        id INT PRIMARY KEY,
        name VARCHAR(100),
        age INT
    );

3.2 外键(Foreign Key)

  • 定义:用于建立两个表之间的关联关系,确保数据的一致性和完整性。

  • 创建示例

    CREATE TABLE order (
        order_id INT PRIMARY KEY,
        customer_id INT,
        order_date DATE,
        FOREIGN KEY (customer_id) REFERENCES customer (id)
    );

3.3 唯一约束(Unique)

  • 定义:确保列中的值唯一,允许 NULL 值。

  • 创建示例

    CREATE TABLE users ( 
        id INT AUTO_INCREMENT PRIMARY KEY, 
        username VARCHAR(50), 
        email VARCHAR(100) UNIQUE, 
        phone VARCHAR(20), 
        CONSTRAINT uk_users_phone UNIQUE (phone) 
    );

四、索引

4.1 定义

索引是用于提高数据查询速度的数据库对象,通过创建额外的数据结构来快速定位和访问表中的数据行。

4.2 分类

按数据结构分类
索引类型 数据结构特点 适用场景
B-Tree 索引 基于平衡树,支持范围查询和排序操作 适用于需要频繁进行范围查询和排序的场景
Hash 索引 基于哈希表,支持快速等值查询 适用于需要快速进行等值查询的场景
全文索引 用于文本数据的全文检索 适用于需要对文本内容进行搜索的场景
按逻辑结构分类
索引类型 特点
普通索引 基本索引类型,无唯一性约束
唯一索引 索引列的值必须唯一
组合索引 由多个列组合而成的索引
主键索引 特殊的唯一索引,通常与主键关联

五、视图

5.1 定义

视图是一个虚拟表,基于一个或多个基表的定义。视图中的数据是动态的,依赖于基表的数据。

5.2 优点

  • 便捷整合:封装复杂的 SQL 查询,简化操作。

  • 保密:隐藏基表结构,保护敏感数据。

  • 简化权限管理:通过视图授权,减少对基表的直接访问。

5.3 缺点

  • 耗费时间:查询时需要转换为基表查询。

  • 修改不便:复杂视图的更新操作受限较多。

5.4 操作

操作类型 语法示例
创建视图 CREATE VIEW view_name AS SELECT ...
查询视图 SELECT * FROM view_name
删除视图 DROP VIEW view_name

六、存储过程

6.1 定义

存储过程是一组预编译的 SQL 语句,存储在数据库中,可通过名称调用执行。

6.2 优点

  • 提高代码复用性

  • 减少网络传输

  • 提高执行效率

  • 增强安全性

6.3 创建示例

CREATE OR REPLACE PROCEDURE proc_name
AS
BEGIN
    -- SQL 语句
END;

七、函数

7.1 定义

函数是用于计算和返回值的预编译代码块,可在 SQL 查询中使用。

7.2 创建示例

CREATE OR REPLACE FUNCTION fun_sum (P_N NUMBER)
RETURN NUMBER
IS
    S NUMBER := 0;
BEGIN
    FOR I IN 1..P_N LOOP
        S := S + I;
    END LOOP;
    RETURN S;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END;

7.3 调用示例

SELECT fun_sum(100) FROM DUAL;

八、触发器

8.1 定义

触发器是一种特殊的数据库对象,当特定事件发生时自动执行预定义的操作。

8.2 创建示例

CREATE OR REPLACE TRIGGER tri_insert
BEFORE INSERT ON emp1
FOR EACH ROW
BEGIN
    INSERT INTO emp2 (empno) VALUES (1);
END;

8.3 优缺点

  • 优点:实现复杂的数据约束、审计等。

  • 缺点:可能影响数据库性能,设计和维护复杂。


网站公告

今日签到

点亮在社区的每一天
去签到