本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將新資料列插入資料表中。您可以使用 VALUES 語法插入單一資料列、使用 VALUES 語法插入多個資料列,或是一個或多個由查詢結果所定義的資料列 (INSERT INTO...SELECT)。
注意
我們強烈鼓勵您使用 COPY 命令來載入大量資料。使用個別 INSERT 陳述式填入資料表的速度可能會相當慢。或者,如果您的資料已存在於其他 Amazon Redshift 資料庫資料表中,請使用 INSERT INTO SELECT 或 CREATE TABLE AS 來改善效能。如需使用 COPY 命令載入資料表的相關資訊,請參閱 在 Amazon Redshift 中載入資料。
注意
單一 SQL 陳述式的大小上限為 16 MB。
語法
INSERT INTO table_name [ ( column [, ...] ) ] {DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ( { expression | DEFAULT } [, ...] ) [, ...] ] | query }
參數
- table_name
-
暫時性或持久性資料表。只有資料表的擁有者,或具有資料表 INSERT 權限的使用者可以插入資料列。如果您使用 query 子句插入資料列,則必須具有查詢中所指名資料表的 SELECT 權限。
注意
使用 INSERT (外部資料表),將 SELECT 查詢結果插入外部目錄上的現有資料表。如需詳細資訊,請參閱INSERT (外部資料表)。
- 欄位
-
您可以將值插入資料表的一個或多個資料欄。您可以依任意順序列出目標資料欄名稱。若您未指定資料欄清單,則要插入的值必須依照 CREATE TABLE 陳述式中宣告的順序對應資料表資料欄。若要插入的值數目少於資料表中的資料欄數,則會在前 n 個資料欄中載入。
任何未在 INSERT 陳述式中列出的資料欄中都會載入宣告的預設值或 null 值 (隱含或明確)。
- DEFAULT VALUES
-
若在建立資料表時對資料表中的資料欄指派預設值,請使用這些關鍵字插入完全由預設值組成的資料列。若有任何資料欄未包含預設值,則會將 null 插入這些資料欄。若有任何資料欄宣告 NOT NULL,則 INSERT 陳述式會傳回錯誤。
- VALUES
-
使用此關鍵字插入一個或多個資料列,每列包含一個或多個值。每列的 VALUES 清單必須符合資料欄清單。若要插入多個資料列,請使用逗號分隔符號分隔每份表達式清單。切勿重複 VALUES 關鍵字。多列 INSERT 陳述式的所有 VALUES 清單必須包含相同數目的值。
- 運算式
-
單一值,或判斷值為單一值的表達式。每個值都必須與其插入所在資料欄的資料類型相容。若值的資料類型與資料欄的宣告資料類型不相符,則會在可能的情況下自動轉換成相容的資料類型。例如:
-
小數值
1.1
插入 INT 資料欄時會是1
。 -
小數值
100.8976
插入 DEC(5,2) 資料欄時會是100.90
。
您可以在表達式中包含類型轉換語法,藉此明確將值轉換成相容的資料類型。例如,若資料表 T1 中的資料欄 COL1 是 CHAR(3) 資料欄:
insert into t1(col1) values('Incomplete'::char(3));
此陳述式會將值
Inc
插入資料欄。若是單一資料列 INSERT VALUES 陳述式,您可以使用純量子查詢做為表達式。子查詢的結果會插入適當的資料欄中。
注意
多資料列 INSERT VALUES 陳述式中不支援使用子查詢做為表達式。
-
- DEFAULT
-
使用此關鍵字可依資料表建立時所定義,插入資料欄的預設值。若資料欄沒有預設值,則會插入 null。若具有 NOT NULL 限制條件的資料欄在 CREATE TABLE 陳述式中沒有明確指定的預設值,則無法將預設值插入該資料欄。
- query
-
藉由定義任何查詢將一個或多個資料列插入資料表。查詢產生的所有資料列都會插入資料表中。查詢必須傳回與資料表中資料欄相容的資料欄清單,但資料欄名稱不需相符。
使用須知
注意
我們強烈鼓勵您使用 COPY 命令來載入大量資料。使用個別 INSERT 陳述式填入資料表的速度可能會相當慢。或者,如果您的資料已存在於其他 Amazon Redshift 資料庫資料表中,請使用 INSERT INTO SELECT 或 CREATE TABLE AS 來改善效能。如需使用 COPY 命令載入資料表的相關資訊,請參閱 在 Amazon Redshift 中載入資料。
所插入值的資料格式必須符合 CREATE TABLE 定義所指定的資料格式。
將大量新資料列插入資料表之後:
-
清空資料表以回收儲存空間和重新排序資料列。
-
分析資料表以更新查詢規劃器的統計資訊。
若插入 DECIMAL 資料欄的值超出指定的小數位數,則載入的值會適當捨入。例如,若將值 20.259
插入 DECIMAL(8,2) 欄,儲存的值會是 20.26
。
您可以插入至 GENERATED BY DEFAULT AS IDENTITY 資料欄。您可以利用您提供的值,更新定義為 GENERATED BY DEFAULT AS IDENTITY 的資料欄。如需詳細資訊,請參閱GENERATED BY DEFAULT AS IDENTITY。