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

PHP 搭配 MySQL 建立暫存表完整教學與範例

     編輯:MySQL 綜合教學

前言

在 MySQL 資料庫操作中,暫存表是一項非常實用的功能,它能在當前連線期間儲存中繼運算結果,連線結束時自動銷毀,不會佔用永久儲存空間。本文將詳細說明如何使用 PHP 搭配 MySQL 建立暫存表,並搭配實際程式碼範例幫助您快速上手。

什麼是 MySQL 暫存表?

暫存表(Temporary Table)僅在當前資料庫連線(Session)中可見,連線關閉或執行 DROP TEMPORARY TABLE 時自動刪除。它適合用於複雜查詢的中繼結果暫存、大量資料分步處理等場景,能有效降低主表鎖定風險並提升效能。

PHP 建立暫存表完整範例

以下範例展示從連線資料庫、建立暫存表、插入資料到查詢結果的完整流程:

<?php
// 1. 建立資料庫連線
$link = mysql_connect('localhost', 'root', '456789');

if ($link) {
    // 2. 選擇資料庫並設定字元集
    mysql_select_db('cppc360', $link);
    mysql_query("SET NAMES 'gbk'", $link);
    echo "資料庫連線成功!<br>";

    // 3. 建立暫存表 tmp_query
    $temp_sql = "CREATE TEMPORARY TABLE tmp_query (
        tmp_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        id INT(11) DEFAULT NULL,
        area VARCHAR(20) DEFAULT NULL
    )";

    $temp_query = mysql_query($temp_sql, $link);
    if (!$temp_query) {
        die("暫存表建立失敗:" . mysql_error($link));
    }

    // 4. 從正式表查詢符合條件的資料寫入暫存表
    $sql = "INSERT INTO tmp_query (id, area)
            SELECT id, area
            FROM php168_item_content_1
            WHERE content LIKE '%電廠%'
            ORDER BY id DESC";
    mysql_query($sql, $link);

    // 5. 查詢暫存表資料並輸出
    $sql = "SELECT * FROM tmp_query";
    $query1 = mysql_query($sql, $link);
    $total = mysql_num_rows($query1);
    echo "共找到 {$total} 筆資料<br>";

    while ($rs = mysql_fetch_assoc($query1)) {
        echo "ID: {$rs['id']}    區域: {$rs['area']}<br>";
    }

    // 6. 釋放結果集並關閉連線
    mysql_free_result($query1);
    mysql_close($link);
} else {
    die("資料庫連線失敗:" . mysql_error());
}
?>

關鍵步驟解析

1. 建立暫存表語法

使用 CREATE TEMPORARY TABLE 關鍵字,結構定義與一般資料表相同,支援主鍵、索引、自動遞增等屬性。

2. 資料導入暫存表

透過 INSERT INTO ... SELECT ... 語法,可直接將查詢結果寫入暫存表,避免在 PHP 端逐筆處理,大幅提升效能。

3. 暫存表生命週期管理

  • 僅目前連線可見,其他連線無法存取
  • 連線結束(腳本執行完畢或呼叫 mysql_close())自動銷毀
  • 可手動執行 DROP TEMPORARY TABLE tmp_query 提前釋放

常見應用場景

  • 複雜報表查詢的中繼運算結果暫存
  • 大量資料分批次處理(如 ETL 流程)
  • 多表關聯查詢結果暫存,避免重複 JOIN 運算
  • 程式邏輯中需重複使用的查詢結果快取

注意事項與最佳實踐

  1. 建議改用 mysqli 或 PDO:mysql_* 函式已棄用,新專案請使用 mysqli 或 PDO,支援預處理語句,更安全。
  2. 字元集一致性:連線、資料表、PHP 檔案編碼三者字元集需一致,避免中文亂碼。
  3. 索引優化:暫存表若資料量大,建議在常用查詢欄位(如範例中的 area)加上索引。
  4. 權限需求:建立暫存表需要 CREATE TEMPORARY TABLES 權限。

進階:以 PDO 重寫相同功能

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=cppc360;charset=gbk", 'root', '456789');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 建立暫存表
    $pdo->exec("CREATE TEMPORARY TABLE tmp_query (
        tmp_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        id INT(11) DEFAULT NULL,
        area VARCHAR(20) DEFAULT NULL
    )");

    // 寫入資料
    $pdo->exec("INSERT INTO tmp_query (id, area)
                SELECT id, area
                FROM php168_item_content_1
                WHERE content LIKE '%電廠%'
                ORDER BY id DESC");

    // 查詢並輸出
    $stmt = $pdo->query("SELECT * FROM tmp_query");
    echo "共找到 {$stmt->rowCount()} 筆資料<br>";
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "ID: {$row['id']}    區域: {$row['area']}<br>";
    }
} catch (PDOException $e) {
    die("錯誤:" . $e->getMessage());
}
?>

總結

MySQL 暫存表是處理複雜查詢與大量資料運算的利器,搭配 PHP 可輕鬆實現中繼結果隔離與效能優化。建議新專案採用 PDO 或 mysqli,並善用索引與字元集設定,發揮暫存表最大效益。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved