使用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');