SQL Insert Into
SQL INSERT INTO 语句
Section titled “SQL INSERT INTO 语句”SQL INSERT INTO 语句
Section titled “SQL INSERT INTO 语句”INSERT INTO 语句用于向表中添加新的行(记录)数据。这是您在使用 CREATE TABLE 定义表结构后,用来填充表的方式。
SQL INSERT INTO 语句
Section titled “SQL INSERT INTO 语句”您可以使用 INSERT INTO 语句的几种方式,具体取决于您是为所有列提供值,还是仅为特定列提供值。
SQL INSERT INTO 语法
Section titled “SQL INSERT INTO 语法”形式 1:插入所有列的值
如果您按照在 CREATE TABLE 中定义的顺序,为表中的所有列提供值,则无需指定列名。
INSERT INTO table_name VALUES (value1, value2, value3, …);
注意:这种形式不太健壮。如果表结构发生变化(例如,添加或重新排序了列),此语句可能会失败或错误地插入数据。通常建议使用形式 2。
形式 2:指定列名和值(推荐)
这种形式明确列出了您要插入数据的列,后跟对应的值。这更安全,可读性更高。
INSERT INTO table_name (column1, column2, column3, …) VALUES (value1, value2, value3, …);
value1, value2, ... 的顺序必须与 column1, column2, ... 的顺序匹配。
大多数现代 SQL 数据库允许在一个 INSERT INTO 语句中插入多行,这比多个单独的 INSERT 语句更高效:
INSERT INTO table_name (column1, column2, …) VALUES (value1a, value2a, …), (value1b, value2b, …), (value1c, value2c, …);
演示数据库 Schema
Section titled “演示数据库 Schema”假设我们有一个 Customers 表,定义如下:
CREATE TABLE Customers ( CustomerID INT PRIMARY KEY AUTO_INCREMENT, — Or IDENTITY(1,1) for SQL Server, or SERIAL for PostgreSQL CustomerName VARCHAR(255) NOT NULL, ContactName VARCHAR(255), Address VARCHAR(255), City VARCHAR(100), PostalCode VARCHAR(20), Country VARCHAR(100) );
注意:AUTO_INCREMENT (MySQL)、IDENTITY (SQL Server) 或使用带 SERIAL 的 sequence (PostgreSQL) 意味着当插入新行时,CustomerID 将由数据库自动生成,以确保唯一性。
INSERT INTO 示例:插入完整记录
Section titled “INSERT INTO 示例:插入完整记录”让我们向 Customers 表插入一个新客户,为除 CustomerID(它是自动生成的)之外的所有列提供值。
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)VALUES ('New Wave Imports', 'Helen Bennett', '200 Market St', 'San Francisco', '94107', 'USA');执行此语句后,Customers 表将新增一行。此新客户的 CustomerID 将由数据库自动分配。
例如,如果这是第一条记录,它可能看起来像:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | New Wave Imports | Helen Bennett | 200 Market St | San Francisco | 94107 | USA |
只插入指定列的数据
Section titled “只插入指定列的数据”也可以只向指定列插入数据。任何未在 INSERT INTO 语句中列出的列将接收其 DEFAULT 值(如果已定义)或 NULL(如果该列可为空且没有默认值)。如果某列是 NOT NULL 且没有 DEFAULT 值,并且您省略了它,则 INSERT 将失败。
以下 SQL 语句将插入一个新行,但仅为 CustomerName、City 和 Country 提供数据。
INSERT INTO Customers (CustomerName, City, Country)VALUES ('Urban Living', 'London', 'UK');Customers 表随后可能包含(假设这是第二条记录):
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | New Wave Imports | Helen Bennett | 200 Market St | San Francisco | 94107 | USA |
| 2 | Urban Living | NULL | NULL | London | NULL | UK |
在此,对于 ‘Urban Living’ 客户,ContactName、Address 和 PostalCode 为 NULL,因为它们未被指定,且是可空列,没有默认值。
实际应用:向注册系统添加新用户,在电子商务平台中记录新销售,在应用程序日志中记录事件。
最佳实践:对于 INSERT 语句,始终使用显式的列列表(形式 2),以使您的 SQL 更易于维护,并在表 schema 发生变化时不易出错。
获取插入的 ID:许多应用程序需要知道新插入行的 ID(特别是对于自动生成的主键)。数据库系统提供了获取此 ID 的方法,例如 LAST_INSERT_ID() (MySQL)、SCOPE_IDENTITY() (SQL Server),或 RETURNING 子句 (PostgreSQL, SQLite)。