嘗試用標準 SQL SELECT col1, col2 INTO new_table FROM src_table 在 MySQL 中備份表時,報錯:ERROR 1327 (42000): Undeclared variable: new_table。原因是 MySQL 不支持此語法(將 INTO 解析為變量賦值)。正確替代方案是 CREATE TABLE ... SELECT。
SELECT `id`, `name` INTO `backup_table` FROM `source_table`;
-- ERROR 1327 (42000): Undeclared variable: backup_table
-- 一條語句:建表 + 複製數據 + 自動推導列類型
CREATE TABLE `backup_table`
SELECT `id`, `name` FROM `source_table` WHERE `status` = 1;
CREATE TABLE `www_phpernote_com`
SELECT
A.`id`,
B.`id` AS `typeId`,
A.`brand`,
A.`quanpin`,
A.`simple`
FROM `brands` AS A
JOIN `cartype` AS B ON A.`type` = B.`name`
GROUP BY A.`brand`;
GROUP BY 去重| 特性 | CREATE TABLE SELECT | 標準建表 + INSERT SELECT |
|---|---|---|
| 主鍵 | ❌ 不複製 | ✅ 保留 |
| 索引 | ❌ 不複製 | ✅ 保留 |
| 外鍵 | ❌ 不複製 | ✅ 保留 |
| AUTO_INCREMENT | ❌ 丟失 | ✅ 保留 |
| 列註釋/字符集 | ❌ 丟失 | ✅ 保留 |
| 適用場景 | 臨時表、測試集、歸檔快照 | 生產遷移、備份、重建 |
CREATE TABLE `new_table` LIKE `source_table`;(克隆結構、索引、約束)INSERT INTO `new_table` SELECT * FROM `source_table`;(複製數據)INSERT ... WHERE id BETWEEN ? AND ?CHECKSUM TABLE source_table, new_table;記住:CREATE TABLE SELECT 只做「快照」,不做「遷移」。