参考资料

  1. MySQL 命令详细说明以及案例
  2. MySQL UNION 操作符详细说明以及案例
  3. MySQL ORDER BY(排序) 语句详细说明以及案例
  4. MySQL 创建数据库
  5. MySQL LIKE 子句详细说明以及案例
  6. MySQL 删除数据表
  7. MySQL 复制表详细说明以及案例
  8. MySQL GROUP BY 语句详细说明以及案例

MySQL 临时表详细说明

1. 临时表的定义
临时表是MySQL中一种特殊的表,用于存储临时数据。它的生命周期仅限于当前会话,会话结束后,临时表会自动删除。

2. 临时表的特点

  • 会话级别:临时表仅在创建它的会话中可见,其他会话无法访问。

  • 自动删除:会话结束时,临时表会自动删除。

  • 命名冲突:临时表可以与普通表同名,但优先访问临时表。

  • 存储引擎:临时表可以使用MySQL支持的任何存储引擎(如InnoDB、MyISAM等)。

3. 创建临时表的语法

CREATE TEMPORARY TABLE 表名 (
    列名1 数据类型 [约束条件],
    列名2 数据类型 [约束条件],
    ...
);

4. 临时表的应用场景

  • 存储中间结果,简化复杂查询。

  • 在存储过程或函数中使用临时表处理数据。

  • 避免与普通表命名冲突。


临时表案例

案例1:创建临时表并插入数据

-- 创建临时表
CREATE TEMPORARY TABLE temp_employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    salary DECIMAL(10, 2)
);

-- 插入数据
INSERT INTO temp_employees (id, name, salary) VALUES (1, 'Alice', 5000.00);
INSERT INTO temp_employees (id, name, salary) VALUES (2, 'Bob', 6000.00);

-- 查询临时表
SELECT * FROM temp_employees;

案例2:在复杂查询中使用临时表

-- 创建临时表存储中间结果
CREATE TEMPORARY TABLE temp_sales_summary AS
SELECT product_id, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_id;

-- 使用临时表进行进一步查询
SELECT p.product_name, t.total_quantity
FROM products p
JOIN temp_sales_summary t ON p.product_id = t.product_id;

案例3:在存储过程中使用临时表

DELIMITER //

CREATE PROCEDURE process_data()
BEGIN
    -- 创建临时表
    CREATE TEMPORARY TABLE temp_data (
        id INT,
        value VARCHAR(100)
    );

    -- 插入数据
    INSERT INTO temp_data (id, value) VALUES (1, 'Data1');
    INSERT INTO temp_data (id, value) VALUES (2, 'Data2');

    -- 处理数据
    SELECT * FROM temp_data;

    -- 临时表会在存储过程结束时自动删除
END //

DELIMITER ;

-- 调用存储过程
CALL process_data();

注意事项

  • 临时表不支持外键约束。

  • 临时表的数据不会写入磁盘(除非使用磁盘临时表)。

  • 临时表的操作不会记录在二进制日志中,因此无法通过复制或恢复操作恢复临时表数据。

通过临时表,可以高效地处理临时数据,避免对数据库结构造成影响。