首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料庫重命名:RENAME TABLE 跨庫移動表完整實戰

     編輯:MySQL 資料庫相關知識

MySQL 不支援 RENAME DATABASE,若要將整庫表移至新資料庫,標準做法是:建立新庫 → RENAME TABLE 逐表移動 → 刪除舊庫。

完整操作腳本

-- 1. 建立新資料庫(指定字元集)
CREATE DATABASE `ct` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 2. 逐表重命名(舊庫.表 -> 新庫.表)
RENAME TABLE `51cola`.`commentmeta`     TO `ct`.`commentmeta`;
RENAME TABLE `51cola`.`comments`       TO `ct`.`comments`;
RENAME TABLE `51cola`.`customcontactforms_fields`       TO `ct`.`customcontactforms_fields`;
RENAME TABLE `51cola`.`customcontactforms_field_options` TO `ct`.`customcontactforms_field_options`;
RENAME TABLE `51cola`.`customcontactforms_forms`         TO `ct`.`customcontactforms_forms`;
RENAME TABLE `51cola`.`customcontactforms_styles`        TO `ct`.`customcontactforms_styles`;
RENAME TABLE `51cola`.`customcontactforms_user_data`     TO `ct`.`customcontactforms_user_data`;
RENAME TABLE `51cola`.`links`          TO `ct`.`links`;
RENAME TABLE `51cola`.`options`        TO `ct`.`options`;
RENAME TABLE `51cola`.`postmeta`       TO `ct`.`postmeta`;
RENAME TABLE `51cola`.`posts`          TO `ct`.`posts`;
RENAME TABLE `51cola`.`terms`          TO `ct`.`terms`;
RENAME TABLE `51cola`.`term_relationships` TO `ct`.`term_relationships`;
RENAME TABLE `51cola`.`term_taxonomy`  TO `ct`.`term_taxonomy`;
RENAME TABLE `51cola`.`usermeta`       TO `ct`.`usermeta`;
RENAME TABLE `51cola`.`users`          TO `ct`.`users`;

-- 3. 確認無誤後刪除舊庫
DROP DATABASE `51cola`;

自動產生 RENAME TABLE 腳本


SELECT CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `ct`.`', TABLE_NAME, '`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '51cola';

將輸出複製執行即可,避免手寫遺漏。

注意事項

  • RENAME TABLE 是原子操作,執行期間會短暫鎖表,大表影響極小(僅修改元數據)。
  • 視圖、存儲過程、觸發器、事件不會自動遷移,需額外匯出 mysqldump -d --routines --triggers --events 並在新庫建立。
  • 外鍵關係會隨表一起移動,但若父/子表不在同一庫,跨庫外鍵在 MySQL 8.0 才支援,舊版本需先刪除外鍵再移動。
  • 權限(GRANT)針對庫級別,移動後需重新授權。

替代方案:mysqldump + 導入


mysqldump -u root -p --databases 51cola > 51cola.sql
# 編輯 SQL 將 `51cola` 替換為 `ct`
sed -i 's/`51cola`/`ct`/g' 51cola.sql
mysql -u root -p < 51cola.sql

適合表數極多或需同時修改字元集的場景。

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