SQL复制表

1. 复制表结构+数据2. 复制表结构2.1 带主键、索引等2.2 不带主键

3. 复制表数据

1. 复制表结构+数据

问题:新表没有旧表的主键、索引等,需要手动加上。

-- mysql

CREATE TABLE new_table

[AS] /* 加不加AS都行 */

SELECT *

FROM old_table;

-- Oracle

CREATE TABLE new_table

AS

SELECT *

FROM old_table;

可以创建时指定,或者创建后再alter。

CREATE TABLE new_tabel( PRIMARY KEY(Column_x))

SELECT *

FROM old_table

2. 复制表结构

2.1 带主键、索引等

CREATE TABLE new_table

LIKE old_table;

2.2 不带主键

CREATE TABLE new_table

SELECT *

FROM old_table

WHERE 1 = 2;

-- mysql 不支持

SELECT * INTO new_table

FROM old_table

WHERE 1 = 2;

3. 复制表数据

-- 法1,新旧表结构完全一致,要求new table已经存在。

-- 大量数据复制时,性能不如CREATE...。

INSERT INTO new_table

SELECT *

FROM old_table;

-- 法2,新旧表结构完全一致,要求new table 不存在。但是mysql不支持

SELECT * INTO new_table

FROM old_table;

-- 结构不一致

INSERT INTO new_table(c1, c2...)

SELECT c3, c4...

FROM old_table;

查看原文