Skip to content

SQL 中提供了 INSERT 语句,来插入数据。

通常有以下 3 种应用场景:

  1. 向表中插入一行
  2. 向表中插入多行
  3. 复制另一表中的数据以插入到现有表

插入一行数据

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

该语法有以下注意点:

  1. columnvalue一一对应的,且总数量一致。
  2. 在插入新行之前,数据库系统检查所有完整性约束。例如,FOREIGN KEY 约束,PRIMARY KEY 约束,CHECK 约束和 NOT NULL 约束。如果违反了其中一个约束,数据库系统将发出错误并终止语句,而不向表中插入任何新行。
  3. 在插入新行时,如果未在 INSERT 语句中指定某一 column 与其对应 value,则该 column 将采取其默认值
  4. 在插入新行时,如果定义的 value 数量超过了表格中的 column数,则会出现错误。

如果 value 序列与 column 的顺序匹配,则可以省略指定 column 序列:

sql
INSERT INTO table_name
VALUES (value1, value2, ...)

在这种场景下,如果存在自增长列,可以在对应位置赋值 NULL 以忽略它。自增长列,会自动赋值。

sql
INSERT INTO table_name
VALUES (value1, value2, NULL, ...)

插入多行数据

使用单个 INSERT 语句插入多行:

sql
INSERT INTO table_name
VALUES (value1, value2, ...),
       (value1, value2, ...),
       (value1, value2, ...);

复制表数据

复制表数据,需要 INSERTSELECT 语句联用,而不再使用 VALUES

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