首先,这三条语句都可以用来进行数据迁移,即将表1中的数据复制到表2中;
其次依次说一下这三者:
1. SELECT INTO FROM:
- “全称”:SELECT value1,value2 INTO table2 FROM table1
- 该语句在复制插入时会自动创建table2,因此要求复制之前table2不存在,直接将table1对应的字段拷贝过来并创建一个新表,名为table2
- MySQL 数据库不支持该语句(是他说的)
2. INSERT INTO SELECT FROM:
- “全称”:INSERT INTO table2(field1,field2) SELECT value1,value2 FROM table1
- 从该SQL上面就可以明白这句话的含义:将table1的字段value1、value2取出来,插入到table2中,并可以重命名。因而该语句要求table2存在,而且字段field1,field2也得存在
3. CREATE TABLE AS SELECT FROM:
- 这个语句有几种不同的情况,但均要求table2不存在:
- CREATE TABLE table2 AS SELECT * FROM table1: 这是最简单最常见的,就是将table1结果全部取出后,照原样生成一个table2;
- CREATE TABLE table2(name1,name2) AS SELEC value1,value2 FROM table1:复制表table1的部分字段,并且制定列名
- CREATE TABLE table2 AS SELECT * FROM table1 WHERE ... : 此时只会复制table1的表结构并创建table2。效果类似于:CREATE TABLE table2 LIKE table1
INSERT INTO SELECT FROM & CREATE TABLE AS SELECT FROM的性能差别:
因为二者都可以进行表数据的复制,二者除了一个要求表格事先存在、一个事先不存在之外,差别还体现在性能上。INSERT INTO SELECT FROM是DML(Data Manipulation Language)语句,CREATE TABLE AS SELECT FROM是DDL(Data Definition Language)语句,当复制的数据量较大时,DDL语句效率会优于DML语句,因而大数据量迁移,CREATE TABLE AS SELECT FROM更好。