首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP mysqli 批量修改資料庫表前綴完整實作教學

     編輯:PHP 相關知識

前言

在專案遷移或架構調整時,常會遇到需要一次修改資料庫中所有資料表前綴的需求。若資料表數量龐大,逐一手動執行 RENAME TABLE 不僅耗時,更極易出錯。本文提供一支完整的 PHP mysqli 腳本,能自動掃描指定資料庫下的所有資料表,並依設定的新舊前綴進行批次重命名,過程中會即時顯示執行結果,方便確認與除錯。

核心邏輯說明

  • 連線資料庫並設定字元集,避免中文亂碼。
  • 執行 SHOW TABLES 取得所有資料表名稱。
  • 逐一檢查資料表名稱是否包含舊前綴,若符合則組合 RENAME TABLE SQL 指令。
  • 執行 SQL 並記錄成功或失敗訊息,以 HTML 表格呈現。
  • 釋放結果集並關閉連線。

完整程式碼

<?php
header('Content-Type: text/html; charset=utf-8');

// 資料庫連線設定
$DB_host     = 'localhost';
$DB_user     = 'root';
$DB_psw      = 'root3306';
$DB_database = 'gk_yue39_com';
$DB_charset  = 'utf8';

// 舊前綴與新前綴
$dbprefix     = 'yue392_com_';
$new_dbprefix = 'yue39_com_';

// 建立 mysqli 連線物件
$db = new mysqli($DB_host, $DB_user, $DB_psw);

// 檢查連線
if (mysqli_connect_errno()) {
    printf('Connect failed: %s\n', mysqli_connect_error());
    exit();
}

// 選擇資料庫與設定字元集
$db->select_db($DB_database);
$db->set_charset($DB_charset);

// 取得所有資料表
$sql   = 'SHOW TABLES';
$result = $db->query($sql);

echo "{$result->num_rows} 筆資料表記錄<br/>";
echo '<table border="1" cellspacing="0" cellpadding="5" align="center" width="90%">';
echo '<tr><th>執行的 SQL</th><th>結果</th></tr>';

// 逐一處理
while ($row = $result->fetch_assoc()) {
    // SHOW TABLES 回傳的欄位名稱通常是 Tables_in_{dbname}
    foreach ($row as $table_name) {
        // 僅處理符合舊前綴的資料表
        if (strpos($table_name, $dbprefix) === 0) {
            $new_name = str_replace($dbprefix, $new_dbprefix, $table_name);
            $rename_sql = "RENAME TABLE `{$table_name}` TO `{$new_name}`";
            
            if ($db->query($rename_sql)) {
                echo "<tr><td>{$rename_sql}</td><td><font color='blue'> success</font></td></tr>";
            } else {
                echo "<tr><td>{$rename_sql}</td><td><font color='red'> failed: {$db->error}</font></td></tr>";
            }
        } else {
            echo "<tr><td>略過: {$table_name} (不符合前綴)</td><td><font color='gray'> skipped</font></td></tr>";
        }
    }
}

echo '</table>';
$result->free();
$db->close();
?>

使用注意事項

  1. 備份優先:執行前務必完整備份資料庫,防止意外導致資料遺失。
  2. 權限需求:執行帳號需具備 ALTER 與 DROP 權限(RENAME TABLE 內部需要)。
  3. 外鍵限制:若資料表有外鍵關聯,直接改名可能導致錯誤,建議先移除外鍵再執行,事後再加回。
  4. 大小寫敏感:Linux 環境下資料表名稱區分大小寫,請確認前綴大小寫完全一致。
  5. 測試環境先行:先在開發或測試環境驗證腳本正確性,再部署至正式環境。

進階改良建議

  • 加入 --dry-run 參數,僅列出將執行的 SQL 不實際執行,供人工核對。
  • 支援多資料庫一次處理,透過陣列迴圈處理多個資料庫連線設定。
  • 記錄完整日誌至檔案,包含時間戳記、舊表名、新表名、執行狀態,利於事後追蹤。
  • 若資料表極多(數千張),考慮分批執行並加入 sleep() 避免長時間佔用資源導致逾時。

掌握這支腳本,未來遇到表前綴調整需求即可輕鬆應對,大幅降低人工操作風險與時間成本。

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