INSERT 语句

使用 INSERT 语句在数据库表中创建记录。您可以指定:

  • 一个或多个要作为新记录插入的值列表

  • 从要作为一组新记录插入的其他表复制数据的 SELECT 语句

INSERT 语句的格式是:

复制
INSERT INTO table_name [(column_name, ...)] VALUES [(expr, ...), ...]
INSERT INTO table_name [(column_name, ...)] SELECT column_name, ... FROM table_name [WHERE expr]

使用 VALUES

column_name 是提供列(其值在 VALUES 子句中指定)的名称和顺序的列名称的可选列表。如果省略 column_name,表达式 (expr) 的列表必须提供在表中定义的所有列的值,并且顺序必须与针对表定义列的顺序相同。

表达式 (expr) 列表提供新记录列的值。要添加多个记录,请为每个记录指定括号中的表达式列表,用逗号分隔。通常,表达式列表由每列的常值组成(但列表也可以是子查询)。必须用一对单引号 (') 将字符串值括起。要在用单引号括起的字符串值中加入单引号,请同时使用两个单引号(例如,'Don''t')。

子查询必须用括号括起。

示例

插入两个表达式列表。

复制
INSERT INTO emp (last_name, first_name, emp_id, salary, hire_date)
   VALUES ('Smith', 'John', 'E22345', 27500, DATE '2028-06-05'), 
   ('Marks', 'Alea', 'E24682', 28500, DATE '2029-09-30')

这个 INSERT 语句为每个指定的值列表向数据库表添加一条记录。在这种情况下,两项记录已添加到员工数据库表 emp 中。为五个列指定值。为表中剩余的列分配空白值,表示 Null。

使用 SELECT

SELECT 语句是为在列名称列表中指定的每个 column_name 值返回值的查询。使用 SELECT 语句(而不是值表达式的列表)允许从一个表中选择一组行,并使用单个 INSERT 语句将其插入其他表。

示例

使用 SELECT 语句插入。

复制
INSERT INTO emp1 (first_name, last_name, emp_id, dept, salary)
   SELECT first_name, last_name, emp_id, dept, salary FROM emp
   WHERE dept = 'D050'

在此类型的 INSERT 语句中,要插入的列的数目必须与 SELECT 语句中列的数目匹配。要插入的列的列表必须与 SELECT 语句中各个列对应,就像与其他类型的 INSERT 语句中值表达式的列表相对应一样。例如,插入的第一个列对应所选的第一个列,插入的第二个列对应所选的第二个列,依次类推。

这些对应列的大小和数据必须兼容。SELECT 列表中的每列都应具有在对 INSERT 列表中的相应列定期进行 INSERT/UPDATE 时 ODBC 或 JDBC 客户端驱动程序接受的数据类型。SELECT 列表列中的值的大小大于对应的 INSERT 列表列的大小时,会截断值。

在插入值之前会先执行 SELECT 语句。

注释 

  • 在容器字段中,只能 INSERT 文本,除非您准备参数化语句,并从应用程序中流式传输数据。要使用二进制数据,可以通过用单引号将文件名括起来分配文件名,也可以使用 PutAs() 函数。指定文件名时,从文件扩展名中推导出文件类型:

    复制
    INSERT INTO table_name (container_name) VALUES (? AS 'filename.file extension')

    不受支持的文件类型将插入为 FILE 类型。

    使用 PutAs() 函数时,需指定类型:PutAs(col, 'type'),其中类型值需为 检索容器字段的内容:CAST() 函数和 GetAs() 函数中所述的支持的文件类型。

  • column_name 也可以指定字段重复 - 例如 lastDates[4]