使用INSERT语句插入行

将数据插入表格的一种方法是使用SQL INSERT语句。 这种方法适用于插入少量数据或从其他表或视图中插入数据。

过程

向表格或视图中添加新行:

使用以下方法之一发出插入语句:
  • 指定列值以插入单行。 您可以使用 VALUES 子句指定常量、宿主变量、表达式、DEFAULT 或 NULL。
  • 在应用程序中,指定列值的数组,以便将多行插入到表中。 在INSERT FOR n ROWS语句的VALUES子句中使用宿主变量数组,向表中添加多行列值。
  • 在INSERT语句中包含SELECT语句,以告知 Db2 另一个表或视图包含新行或新行的数据。

在每种情况下,对于您插入的每一行,您都必须为没有默认值的任何列提供一个值。 对于满足以下条件之一的列,请指定DEFAULT,以告知 Db2 插入该列的默认值:

  • 该列为空。
  • 列的默认值已定义。
  • 该列的数据类型为ROWID。 ROWID列总是有默认值。
  • 该专栏是身份专栏。 身份列总是有默认值。
  • 该列是换行时间戳列。

您可以将值插入到 ROWID 列、标识列或行更改时间戳列中,具体取决于列是使用 GENERATED ALWAYS 还是 GENERATED BY DEFAULT 定义的。

您可以使用INSERT语句的VALUES子句将单行列值插入到表中。 您可以为所有需要输入值的列命名,也可以省略列名列表。 如果省略列名列表,则必须为所有列指定值。

建议 :对于静态INSERT语句,请为所有列命名,并为其提供值,原因如下:
  • 您的插入语句与表格格式无关。 (例如,当表格中添加一列时,无需更改语句。)
  • 您可以验证您是否按顺序指定了数值。
  • 您的源语句更具自描述性。

如果在静态INSERT语句中未指定列名,且表中添加了列,则当INSERT语句被重新使用时可能会发生错误。 除非您修改INSERT语句,为新列添加一个值,否则每次重新绑定INSERT语句后都会发生错误。 即使新列具有默认值,也是如此。

当您列出列名时,必须按照列名列表中的顺序指定其对应值。

INSERT语句示例

  • 以下语句将新部门的信息插入 YDEPT 表中。

    INSERT INTO YDEPT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION)
      VALUES ('E31', 'DOCUMENTATION', '000010', 'E01', ' ');

    在您的 YDEPT 表中插入新的部门行后,您可以使用 SELECT 语句查看已加载到表中的内容。 下面的SQL语句显示了您插入的所有新部门行:

    SELECT *
      FROM YDEPT
      WHERE DEPTNO LIKE 'E%'
      ORDER BY DEPTNO;

    结果表看起来与以下输出类似:

    DEPTNO  DEPTNAME                              MGRNO   ADMRDEPT  LOCATION
    ======  ====================================  ======  ========  ===========
    E01     SUPPORT SERVICES                      000050  A00       -----------
    E11     OPERATIONS                            000090  E01       -----------
    E21     SOFTWARE SUPPORT                      000100  E01       -----------
    E31     DOCUMENTATION                         000010  E01       -----------
  • 以下语句将新员工的信息插入YEMP表中。 因为WORKDEPT列是一个外键,所以为该列插入的值( E31 )必须是主键列中的值,在YDEPT表中是DEPTNO。

    INSERT INTO YEMP
      VALUES ('000400', 'RUTHERFORD', 'B', 'HAYES', 'E31', '5678', '1998-01-01',
              'MANAGER', 16, 'M', '1970-07-10', 24000, 500, 1900);
  • 以下语句也会在YEMP表中插入一行。 因为未指定的列允许空值,所以 Db2 会将空值插入到未指定的列中。

    INSERT INTO YEMP
      (EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT, PHONENO, JOB)
      VALUES ('000410', 'MILLARD', 'K', 'FILLMORE', 'D11', '4888', 'MANAGER');