top
Loading...
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,用于忽略會導致重復關鍵字錯誤的記錄。

·         不要同時使用DELAYEDINSERT...SELECT

·         INSERT語句的目標表會顯示在查詢的SELECT部分的FROM子句中。(在有些舊版本的MySQL中不會出現這種情況。)

·         AUTO_INCREMENT列照常運行。

·         為了確保二進制日志可以被用于再次創建原表,MySQL不允許在INSERT...SELECT運行期間同時進行插入操作。

·         目前,您不能在向一個表插入的同時,又在一個子查詢中從同一個表中選擇。

ON DUPLICATE KEY UPDATE的值部分中,只要您不使用SELECT部分中的GROUP BY,您就可以引用在其它表中的列。有一個副作用是,您必須使值部分中的非唯一列的名稱符合要求。

您可以使用REPLACE替代INSERT,來覆蓋舊行。對于包含唯一關鍵字值,并復制了舊行的新行,在進行處理時,REPLACE可以作為INSERT IGNORE的同類子句:新行被用于替換舊行,而不是被丟棄。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗