在线文档教程

INSERT

SQL As Understood By SQLite

[Top]

INSERT

insert-stmt: hide

expr: show

literal-value: show

raise-function: show

type-name: show

signed-number: show

select-stmt: show

common-table-expression: show

compound-operator: show

join-clause: show

join-constraint: show

join-operator: show

ordering-term: show

result-column: show

table-or-subquery: show

with-clause: show

cte-table-name: show

INSERT 语句有三种基本形式。

  • INSERT INTOtableVALUES(...

  • INSERT INTO table SELECT ...;

INSERT 语句的第二种形式包含一个 SELECT 语句,而不是一个 VALUES 子句。为执行 SELECT 语句返回的每一行数据插入一个新条目。如果指定了列表,那么 SELECT 结果中的列数必须与列列表中的项数相同。否则,如果未指定 column-list,那么SELECT的结果中的列数必须与表中的列数相同。任何 SELECT 语句,包括带有 ORDER BY 和/或 LIMIT 子句的复合 SELECT 和 SELECT 语句,都可以用在这种形式的 INSERT 语句中。

  • INSERT INTO table DEFAULT VALUES;

INSERT 语句的第三种形式是使用 DEFAULT VALUES。INSERT DEFAULT VALUES 语句将一个新行插入到指定的表中。如果在 CREATE TABLE 语句中没有指定任何默认值作为列定义的一部分,则新行的每一列都将填充其默认值,或者填充为 NULL。

初始的 “INSERT” 关键字可以替换为 “REPLACE” 或 “INSERT OR action ” 来指定在 INSERT 命令期间使用的备选约束冲突解决算法。为了与 MySQL 兼容,解析器允许使用单个关键字 REPLACE 作为 “INSERT OR REPLACE” 的别名。

可选的“schema-name.”在表名前缀仅支持顶级 INSERT 语句。对于在 CREATE TRIGGER 语句中发生的 INSERT 语句,表名必须是非限定的。同样,INSERT 语句的 “DEFAULT VALUES” 形式仅支持顶级 INSERT 语句,而不支持触发器中的 INSERT 语句。