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

MySQL 克隆表完整教程:SHOW CREATE TABLE 獲取結構、INSERT SELECT 複製數據

     編輯:MySQL 資料庫相關知識

為什麼不用 CREATE TABLE ... SELECT

該語法**不複製索引、外鍵、觸發器、預設值、AUTO_INCREMENT 等屬性**,僅複製列定義與數據。

標準克隆三步驟

步驟 1:獲取完整建表語句

SHOW CREATE TABLE tutorials_tbl\G

輸出包含:列定義、主鍵、唯一索引、引擎、字符集、AUTO_INCREMENT 當前值等。

步驟 2:修改表名執行建表

CREATE TABLE `clone_tbl` (
  `tutorial_id` int(11) NOT NULL auto_increment,
  `tutorial_title` varchar(100) NOT NULL default '',
  `tutorial_author` varchar(40) NOT NULL default '',
  `submission_date` date default NULL,
  PRIMARY KEY (`tutorial_id`),
  UNIQUE KEY `AUTHOR_INDEX` (`tutorial_author`)
) ENGINE=InnoDB;

步驟 3:複製數據(可選)

INSERT INTO clone_tbl (tutorial_id, tutorial_title, tutorial_author, submission_date)
SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
FROM tutorials_tbl;

進階:存儲過程自動化克隆

DELIMITER //
CREATE PROCEDURE clone_table(IN src_db VARCHAR(64), IN src_tbl VARCHAR(64),
                             IN dst_db VARCHAR(64), IN dst_tbl VARCHAR(64),
                             IN copy_data BOOLEAN)
BEGIN
  DECLARE ddl TEXT;
  SELECT REPLACE(REPLACE(TRIM(TRAILING ';' FROM `Create Table`), CONCAT('`', src_tbl, '`'), CONCAT('`', dst_tbl, '`')),
                 CONCAT(src_db, '.'), CONCAT(dst_db, '.'))
  INTO ddl FROM INFORMATION_SCHEMA.TABLES
  WHERE TABLE_SCHEMA = src_db AND TABLE_NAME = src_tbl;
  SET @sql = ddl; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  IF copy_data THEN
    SET @sql = CONCAT('INSERT INTO `', dst_db, '`.`', dst_tbl, '` SELECT * FROM `', src_db, '`.`', src_tbl, '`');
    PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  END IF;
END//
DELIMITER ;

常見坑點

  • 外鍵引用原表名,克隆後需手動調整
  • 分區表克隆需包含分區定義
  • 視圖無法用此法克隆,需 SHOW CREATE VIEW
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved