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

MySQL 複制表結構與數據的四種 SQL 模式完全指南

     編輯:MySQL 資料庫相關知識

四大複製場景速查表

場景SQL 語句適用版本說明
複製結構 + 數據CREATE TABLE new_tbl SELECT * FROM old_tbl;全版本不複製索引、外鍵、觸發器
僅複製結構 (WHERE 1=2)CREATE TABLE new_tbl SELECT * FROM old_tbl WHERE 1=2;全版本條件永假,無數據返回
僅複製結構 (LIKE)CREATE TABLE new_tbl LIKE old_tbl;MySQL 4.0.25+推薦:完整複製索引、約束、默認值
同結構表數據複製INSERT INTO new_tbl SELECT * FROM old_tbl;全版本列順序必須一致
不同結構表數據複製INSERT INTO new_tbl (c1,c2) SELECT c1,c2 FROM old_tbl;全版本顯式列映射,順序可不同

關鍵差異詳解

CREATE TABLE ... SELECT vs CREATE TABLE ... LIKE

特性SELECT 方式LIKE 方式
索引❌ 不複製✅ 完整複製
主鍵/唯一鍵❌ 丟失✅ 保留
外鍵❌ 丟失✅ 保留
默認值❌ 丟失✅ 保留
AUTO_INCREMENT❌ 重置為 1✅ 保留計數器
觸發器❌ 不複製❌ 不複製
分區定義❌ 不複製✅ 保留

實戰最佳實踐

場景 1:建立測試表(保留完整結構)

CREATE TABLE test_orders LIKE orders;
INSERT INTO test_orders SELECT * FROM orders WHERE create_time > '2024-01-01';

場景 2:跨庫遷移結構

# 導出結構
mysqldump -d -u root -p db_name table_name > structure.sql
# 導入目標庫
mysql -u root -p target_db < structure.sql

場景 3:大表分批複製數據(避免長事務)

-- 假設主鍵 id 連續
INSERT INTO new_tbl SELECT * FROM old_tbl WHERE id BETWEEN 1 AND 10000;
INSERT INTO new_tbl SELECT * FROM old_tbl WHERE id BETWEEN 10001 AND 20000;
-- 配合應用層循環或存儲過程批量執行

版本兼容性提醒

  • MySQL 4.0.25 不支援 LIKE 子句,需用 WHERE 1=2 替代
  • 5.0+ 完整支援所有語法
  • CREATE TABLE ... SELECT 在 8.0 中若來源表有隱藏列可能報錯,建議顯式列出列名
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved