SQL INSERT

概要:本教程将教您如何使用 SQL INSERT 语句向表中插入数据。

SQL INSERT 语句简介

SQL 提供 INSERT 语句,可让您向表中插入一行或多行。INSERT 语句可让您

  1. 向表中插入一行
  2. 向表中插入多行
  3. 将某表中的行复制到另一表。

以下各节中,我们将详细探讨 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 将采用默认值。

向表中插入一行示例

我们将使用 示例数据库 中的 employeesdependents 表,向您展示如何向表中插入一行。

employees_dependents_tables

要向 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: 1Code language: SQL (Structured Query Language) (sql)

您可以使用以下 SELECT 语句检查行是否已成功插入。

SELECT 
    *
FROM
    dependents
WHERE
    employee_id = 178;Code language: SQL (Structured Query Language) (sql)

试用

SQL INSERT one row example

向表中插入多行

要使用单个 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)

试用

SQL INSERT multiple rows example

从其他表复制行

您可以使用 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 copy rows from other tables example

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

本教程是否有用?