13.2.4.1.INSERT...SELECT語法
13.2.4.1. INSERT
... SELECT語法
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
使用INSERT...SELECT,您可以快速地從一個或多個表中向一個表中插入多個行。
示例:
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
使用INSERT...SELECT語句時會出現以下情況:
· 明確地指定IGNORE,用于忽略會導致重復關鍵字錯誤的記錄。
· 不要同時使用DELAYED和INSERT...SELECT。
· INSERT語句的目標表會顯示在查詢的SELECT部分的FROM子句中。(在有些舊版本的MySQL中不會出現這種情況。)
· AUTO_INCREMENT列照常運行。
· 為了確保二進制日志可以被用于再次創建原表,MySQL不允許在INSERT...SELECT運行期間同時進行插入操作。
· 目前,您不能在向一個表插入的同時,又在一個子查詢中從同一個表中選擇。
在ON DUPLICATE KEY UPDATE的值部分中,只要您不使用SELECT部分中的GROUP BY,您就可以引用在其它表中的列。有一個副作用是,您必須使值部分中的非唯一列的名稱符合要求。
您可以使用REPLACE替代INSERT,來覆蓋舊行。對于包含唯一關鍵字值,并復制了舊行的新行,在進行處理時,REPLACE可以作為INSERT IGNORE的同類子句:新行被用于替換舊行,而不是被丟棄。