首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 臨時表使用指南:生命週期、創建刪除與 PHP 實戰

     編輯:MySQL 綜合教學

核心特性

  • 僅在當前會話可見,會話結束自動銷毀
  • 不同會話可創建同名臨時表,互不干擾
  • MySQL 3.23+ 支持,更早版本用 HEAP 表替代
  • SHOW TABLES 不顯示臨時表

創建與使用

CREATE TEMPORARY TABLE SalesSummary (
    product_name VARCHAR(50) NOT NULL,
    total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,
    total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);

INSERT INTO SalesSummary (product_name, total_sales, avg_unit_price, total_units_sold)
VALUES ('cucumber', 100.25, 90, 2);

SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     | 100.25      | 90.00          | 2                |
+--------------+-------------+----------------+------------------+

手動刪除

DROP TABLE SalesSummary;
SELECT * FROM SalesSummary; -- ERROR 1146: Table doesn't exist

PHP 中的生命週期

<?php
$mysqli = new mysqli('localhost', 'root', 'rootpassword', 'TUTORIALS', 3306);

// 腳本執行期間 = 一個會話
$mysqli->query("CREATE TEMPORARY TABLE tmp_session (id INT, data VARCHAR(100))");
$mysqli->query("INSERT INTO tmp_session VALUES (1, 'request data')");
// ... 業務邏輯 ...
// 腳本結束,連接關閉,臨時表自動銷毀
$mysqli->close();
?>

應用場景

  1. 複雜報表中間結果:多步聚合、轉換,避免污染正式表。
  2. 大數據分頁優化:將篩選後的 ID 存入臨時表,再 JOIN 查詳情。
  3. 跨庫/跨服務器數據對賬:拉取遠端數據入臨時表,本地 JOIN 比對。

注意事項

  • 臨時表不支持外鍵、觸發器、分區
  • 事務回滾不會回滾臨時表的 DDL(創建/刪除),但會回滾 DML
  • 複製表結構:CREATE TEMPORARY TABLE tmp LIKE real_table
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved