SQL Insert語句


在本教學中,我們將學習如何使用SQL INSERT語句來將資料插入表中。

1. SQL INSERT語句簡介

SQL提供了INSERT語句,用於將一行或多行插入表中。 INSERT語句用於:

  • 向表中插入一行
  • 向表中插入多行
  • 將行從一個表複製到另一個表中。

我們將在以下部分中來看看INSERT語句的每個用法。

2.向表中插入一行

要向表中插入一行,請使用INSERT語句的以下語法。

INSERT INTO table1 (column1, column2,...)
VALUES
    (value1, value2,...);

在表中插入新行時,應注意以下幾點:

  • 首先,值的數量必須與列數相同。 此外,列和值必須是對應的,因為資料庫系統將通過它們在列表中的相對位置來匹配它們。

  • 其次,在新增新行之前,資料庫系統檢查所有完整性約束,例如,外來鍵約束主鍵約束檢查約束和非空約束。如果違反了其中一個約束,資料庫系統將發出錯誤並終止語句,而不向表中插入任何新行。

如果值序列與表中列的順序匹配,則無需指定列。 請參閱以下INSERT語句,該語句省略INSERT INTO子句中的列列表。

INSERT INTO table1
VALUES
    (value1, value2,...);

但是,這不是一個好的做法。

如果在插入新行時未在INSERT語句中指定列及其值,則列將採用表結構中指定的預設值。 預設值可以是0,序列中的下一個整數值,當前時間,NULL值等。請參閱以下語句:

INSERT INTO (column1, column3)
VALUES
    (column1, column3);

在此語法中,column2將採用預設值。

2. 在表中插入一行記錄

我們將使用範例資料庫中的employeesdependents表來演示如何向表中插入一行。

要在dependents表中插入新行。參考以下語句 -

INSERT INTO dependents (
    first_name,
    last_name,
    relationship,
    employee_id
)VALUES('Max','Su','Child',176);

我們沒有在INSERT語句中使用department_id列,因為dependent_id列是自動增量列,因此,當插入新行時,資料庫系統使用下一個整數作為預設值。

employee_id列是將dependents表連結到employees表的外來鍵。 在新增新行之前,資料庫系統會檢查employees表的employee_id列中是否存在值:176,以確保不違反外來鍵約束。

如果成功插入行,則資料庫系統返回受影響的行數。

可以使用以下SELECT語句檢查是否已成功插入行。

SELECT 
    *
FROM
    dependents
WHERE
    employee_id = 176;

執行上面查詢語句,得到以下結果 -

+--------------+------------+-----------+--------------+-------------+
| dependent_id | first_name | last_name | relationship | employee_id |
+--------------+------------+-----------+--------------+-------------+
|           31 | Max        | Su        | Child        |         176 |
+--------------+------------+-----------+--------------+-------------+
1 rows in set

3. 向表中插入多行記錄

要使用單個INSERT語句插入多行,請使用以下構造:

INSERT INTO table1
VALUES
    (value1, value2,...),
    (value1, value2,...),
    (value1, value2,...),
    ...;

例如,要在dependents表中插入兩行,請使用以下查詢。

INSERT INTO dependents (
    first_name,
    last_name,
    relationship,
    employee_id
)
VALUES
    (
        'Avg',
        'Lee',
        'Child',
        192
    ),
    (
        'Michelle',
        'Lee',
        'Child',
        192
    );

資料庫系統返回2行受影響,可以使用以下語句驗證結果。

SELECT 
    *
FROM
    dependents
WHERE
    employee_id = 192;

4. 從其他表複製行記錄

可以使用INSERT語句查詢來自一個或多個表的資料,並將其插入另一個表中,如下所示:

INSERT INTO table1 (column1, column2) 
SELECT
    column1,
    column2
FROM
    table2
WHERE
    condition1;

在此語法中,使用SELECT(稱為子選擇)而不是VALUES子句。 子選擇可以包含連線,以便可以組合來自多個表的資料。 執行語句時,資料庫系統在插入資料之前首先評估子選擇。

假設有一個名為dependents_archive的表,其結構與dependents表具有相同的結構。 以下語句將dependents表中的所有行複製到dependents_archive表中。

INSERT INTO dependents_archive 
SELECT
    *
FROM
    dependents;

您可以使用以下語句驗證插入操作是否成功 -

SELECT
    *
FROM
    dependents_archive;

通過上面的範例學習,我們已經知道如何使用SQL INSERT語句將一行或多行插入表中。