SQL As Understood By SQLite

INSERT

sql-statement ::= INSERT [OR conflict-algorithm] INTO [database-name .] table-name [(column-list)] VALUES(value-list) |
INSERT
[OR conflict-algorithm] INTO [database-name .] table-name [(column-list)] select-statement

INSERT 语句有两种基本形式。 一种(有 VALUES关键字)在一个已存在的表上建立一个新行。 如果不指定 column-list,那么值的个数必须与表中字段个数相同。 如果给出 column-list,那么值的个数必须与列表中的字段个数相同。 表中不出现在字段列表中的列将会以缺省值填充,如果没有缺省值,则是 NULL。

第二种形式的 INSERT 语句从一个 SELECT 查询中获取数据。 如果没有字段列表, SELECT 返回的结果中的字段数目必须和要插入的表的字段数相同。 或者当给出字段列表时,与列表中的字段数相同。 对于 SELECT 结果中的每一行,都会产生一个新行插入的表中。 其中 SELECT 子句可以是一个简单查询,也可以是一个复合查询。

可先的 conflict-clause 子句允许在该命令执行期间使用其它的冲突解决算法。 详见 ON CONFLICT。 为与Mysql兼容,查询分析器允许使用单一个关键字 REPLACE 作为 "INSERT OR REPLACE"的别名。