概要:本教程将教您如何使用 SQL INSERT 语句向表中插入数据。
SQL INSERT 语句简介
SQL 提供 INSERT
语句,可让您向表中插入一行或多行。INSERT
语句可让您
- 向表中插入一行
- 向表中插入多行
- 将某表中的行复制到另一表。
以下各节中,我们将详细探讨 INSERT
语句的每项功能。
向表中插入一行
要向表中插入一行,请使用 INSERT
语句的以下语法。
INSERT INTO table1 (column1, column2,...)
VALUES
(value1, value2,...);
Code language: SQL (Structured Query Language) (sql)
向表中插入新行时应注意以下几点
- 首先,值的数量必须与列的数量相同。另外,列与值必须对应,因为数据库系统会根据它们在列表中的相对位置进行匹配。
- 其次,在添加新行之前,数据库系统会检查所有完整性约束,例如 外键约束、主键约束、检查约束 和 非空约束。如果违反了其中一项约束,数据库系统会发出错误并终止语句,而不会向表中插入任何新行。
如果值序列与表中列的顺序匹配,则不必指定列。请参阅以下 INSERT
语句,该语句在 INSERT INTO
子句中省略了列列表。
INSERT INTO table1
VALUES
(value1, value2,...);
Code language: SQL (Structured Query Language) (sql)
但这不是一个很好的做法。
向表中插入新行时,如果不使用 INSERT
语句中指定列及其值,该列将采用表结构中指定的默认值。默认值可以是 0、序列中的下一个整数值、当前时间、NULL 值等。请参阅以下语句
INSERT INTO (column1, column3)
VALUES
(column1, column3);
Code language: SQL (Structured Query Language) (sql)
此语法中,column2
将采用默认值。
向表中插入一行示例
我们将使用 示例数据库 中的 employees
和 dependents
表,向您展示如何向表中插入一行。

要向 dependents
表中插入新行。
INSERT INTO dependents (
first_name,
last_name,
relationship,
employee_id
)
VALUES
(
'Dustin',
'Johnson',
'Child',
178
);
Code language: SQL (Structured Query Language) (sql)
我们在 INSERT
语句中未使用 department_id
列,因为 dependent_id
列是自动增量列,因此当您插入新行时,数据库系统会将下一个整数用作默认值。
employee_id
列是外键,用于将 dependents
表链接到 employees
表。添加新行之前,数据库系统会检查 employees
表的 employee_id
列中是否存在值 178,以确保不违反外键约束。
如果已成功插入行,数据库系统会返回受影响的行数。
Affected rows: 1
Code language: SQL (Structured Query Language) (sql)
您可以使用以下 SELECT 语句检查行是否已成功插入。
SELECT
*
FROM
dependents
WHERE
employee_id = 178;
Code language: SQL (Structured Query Language) (sql)

向表中插入多行
要使用单个 INSERT
语句插入多行,请使用以下结构
INSERT INTO table1
VALUES
(value1, value2,...),
(value1, value2,...),
(value1, value2,...),
...;
Code language: SQL (Structured Query Language) (sql)
例如,要向 dependents
表中插入两行,请使用以下查询。
INSERT INTO dependents (
first_name,
last_name,
relationship,
employee_id
)
VALUES
(
'Cameron',
'Bell',
'Child',
192
),
(
'Michelle',
'Bell',
'Child',
192
);
Code language: SQL (Structured Query Language) (sql)
数据库系统返回受影响的两行。您可以使用以下语句验证结果。
SELECT
*
FROM
dependents
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)

从其他表复制行
您可以使用 INSERT
语句从一张或多张表中查询数据,并将其插入到另一张表中,如下所示
INSERT INTO table1 (column1, column2)
SELECT
column1,
column2
FROM
table2
WHERE
condition1;
Code language: SQL (Structured Query Language) (sql)
在此语法中,您使用一个 SELECT
,它被称为子查询,而不是 VALUES
子句。子查询可以包含 连接,以便您可以组合来自多个表的数据。在执行语句时,数据库系统在插入数据之前会先计算子查询。
假设您有一个名为 dependents_archive
的表,其结构与 dependents
表的结构相同。以下语句将从 dependents
表中复制所有行到 dependents_archive
表中。
INSERT INTO dependents_archive
SELECT
*
FROM
dependents;
Code language: SQL (Structured Query Language) (sql)
您可以使用以下语句验证插入操作。
SELECT
*
FROM
dependents_archive;
Code language: SQL (Structured Query Language) (sql)

现在您应该了解如何使用 SQL INSERT 语句将一行或多行插入到表中。