CREATE TABLE ... SELECT 只復制列定義和數據,不包含索引、主鍵、AUTO_INCREMENT、默認值、引擎、字符集等關鍵屬性。完整克隆需三步走。
SHOW CREATE TABLE tutorials_tbl\G *************************** 1. row *************************** Table: tutorials_tbl Create Table: CREATE TABLE `tutorials_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 DEFAULT CHARSET=utf8mb4
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 DEFAULT CHARSET=utf8mb4;
INSERT INTO clone_tbl (tutorial_id, tutorial_title, tutorial_author, submission_date) SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl;
#!/bin/bash
SRC_DB="TUTORIALS"
SRC_TBL="tutorials_tbl"
DST_TBL="clone_tbl"
# 獲取建表語句,替換表名
CREATE_SQL=$(mysql -N -e "SHOW CREATE TABLE \`$SRC_DB\`.\`$SRC_TBL\`" | awk -F'\t' '{print $2}' | sed "s/\`$SRC_TBL\`/\`$DST_TBL\`/")
mysql -e "$CREATE_SQL" $SRC_DB
mysql -e "INSERT INTO \`$DST_TBL\` SELECT * FROM \`$SRC_TBL\`" $SRC_DB
echo "克隆完成:$DST_TBL"
CREATE TABLE new_tbl LIKE old_tbl(保留索引/引擎/字符集,無數據)CREATE TABLE db2.new_tbl LIKE db1.old_tblINSERT INTO new_tbl SELECT * FROM old_tbl WHERE create_time > '2024-01-01'