INSERT - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

INSERT

將新資料列插入資料表中。您可以使用 VALUES 語法插入單一資料列、使用 VALUES 語法插入多個資料列,或是一個或多個由查詢結果所定義的資料列 (INSERT INTO...SELECT)。

注意

我們強烈鼓勵您使用 COPY 命令來載入大量資料。使用個別 INSERT 陳述式填入資料表的速度可能會相當慢。或者,如果您的資料已存在於其他 Amazon Redshift 資料表中,請使用 INSERT INTO SELECT 或CREATE TABLE AS以改善效能。如需使用 COPY 命令載入資料表的詳細資訊,請參閱 載入資料

注意

單一 SQL 陳述式的大小上限為 16 MB。

Syntax (語法)

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 命令載入資料表的詳細資訊,請參閱 載入資料

所插入值的資料格式必須符合 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