首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

INSERT

[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(...);

第一种形式(带有 “VALUES” 关键字)在现有表中创建一个或多个新行。如果省略 table-name 后面的列名列表,则插入每行的值的数量必须与表中的列数相同。在这种情况下,评估 VALUES 列表中每个项的最左边表达式的结果会插入到每个新行的最左边一列中,以此类推。如果指定了列名称列表,则 VALUE 列表中每个字段的值数量必须与指定列的数量相匹配。新行的每个命名列都填充了评估相应 VALUES 表达式的结果。

  • 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 语句。

扫码关注腾讯云开发者

领取腾讯云代金券