多專案共用單一資料庫時,透過表前綴隔離(如 wp_, dz_)。利用 phpMyAdmin 介面配合 information_schema 快速產生批量重命名 SQL。
www_sdck_cnphpcms_sdck_www_sdck_cn。ALTER TABLE ... RENAME TO ... 語句:SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' RENAME TO ', REPLACE(TABLE_NAME, 'phpcms_', 'sdck_'), ';')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'www_sdck_cn' AND TABLE_NAME LIKE 'phpcms_%';
ALTER TABLE phpcms_admin RENAME TO sdck_admin;
ALTER TABLE phpcms_category RENAME TO sdck_category;
ALTER TABLE phpcms_content RENAME TO sdck_content;
-- ... 更多表
| 風險 | 對策 |
|---|---|
| 資料遺失 | 操作前完整備份(結構+資料) |
| 外鍵失效 | 先 DROP FOREIGN KEY,重命名後重建 |
| 視圖/預存程序/觸發器引用舊表名 | 需手動修改定義(ALTER VIEW, DROP/CREATE PROCEDURE) |
| 應用程式配置未同步 | 同步更新框架配置檔(如 CodeIgniter $db['default']['dbprefix']) |
| 單次 SQL 過大超時 | 分批執行(每批 50-100 表) |
DB="www_sdck_cn"
OLD="phpcms_"
NEW="sdck_"
mysql -N -e "SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' RENAME TO ', REPLACE(TABLE_NAME, '$OLD', '$NEW'), ';')
FROM information_schema.TABLES WHERE TABLE_SCHEMA='$DB' AND TABLE_NAME LIKE '$OLD%';" \
| mysql $DB
-N 抑制欄位名輸出,管道直接餵給 mysql 執行。