首先,這三條語句都可以用來進行數據遷移,即將表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更好。