在本教學中,我們將學習如何使用SQL INSERT
語句來將資料插入表中。
SQL提供了INSERT
語句,用於將一行或多行插入表中。 INSERT
語句用於:
我們將在以下部分中來看看INSERT
語句的每個用法。
要向表中插入一行,請使用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
將採用預設值。
我們將使用範例資料庫中的employees
和dependents
表來演示如何向表中插入一行。
要在dependents
表中插入新行。參考以下語句 -
INSERT INTO dependents (
first_name,
last_name,
relationship,
employee_id
)VALUES('Max','Su','Child',176);
我們沒有在INSERT
語句中使用department_i
d列,因為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
要使用單個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;
可以使用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
語句將一行或多行插入表中。