INSERT

You are viewing an old version of this article. View the current version here.

语法

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
 {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
 [ ON DUPLICATE KEY UPDATE
   col=expr
     [, col=expr] ... ]

或:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [PARTITION (partition_list)]
    SET col={expr | DEFAULT}, ...
    [ ON DUPLICATE KEY UPDATE
      col=expr
        [, col=expr] ... ]

或:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col=expr
        [, col=expr] ... ]

INSERT语句用于向表中插入新行。其中INSERT...VALUESINSERT...SET两种语法格式插入数据时需要显式指定字段的值。INSERT...SELECT格式插入的数据是从其他表中筛选出来的。INSERT...SELECT相关内容在INSERT ... SELECT中单独讨论。

表名可以指定为db_name.tbl_name,如果指定了默认数据库,则可以直接指定为tbl_name(见Identifier Qualifiers)。这使得MaraiDB可以通过INSERT ... SELECT语句在不同数据库之间拷贝数据。

MariaDB starting with 10.0

PARTITION子句是在MariaDB 10.0版本中引入的功能。它可以应用在INSERT和SELECT中。详细信息见Partition Pruning and Selection

INSERT语句中的字段列表是可选的。如果指定了字段,则显式表示对应的值插入到哪个字段中,此时VALUES子句中的值可以不用按照表定义语句中指定的字段顺序来给定。如果未指定字段列表,所有的值必须显式按照表定义语句中的字段顺序来给定。

VALUESVALUE关键字中的是值列表,它们使用括号包围。括号中的值列表必须按照字段顺序给定。在单个INSERT语句中可以同时指定多个值列表表示插入多行,而无需每行使用一个INSERT语句。如果有很多行需要插入,这也是一个性能提升点。

对于只插入单行的INSERT语句,使用SET子句则要更简单、更方便的多,因为你无需记住字段的顺序,所有的值都在col = expr中指定了。

要插入的值同样可以通过SQL表达式或者子查询来指定。但如果通过子查询来指定时,该子查询不能访问带插入的表(即INTO子句后的表)。

如果使用了LOW_PRIORITY关键字,INSERT将被延迟到没有其他客户端读取该表的时候执行。如果使用了HIGH_PRIORITY关键字,则该语句和SELECT语句具有相同的优先级。只有那些仅使用表级锁的存储引擎(MyISAM, MEMORY, MERGE)才会受这几个关键字的影响。但是,如果指定了这些关键字中的某一个,concurrent inserts将无法使用。详细信息见HIGH_PRIORITY and LOW_PRIORITY clauses

关于DELAYED更多信息,见INSERT DELAYED

Defaults and Duplicate Values

INSERT IGNORE

示例

指定插入的字段名:

INSERT INTO person (first_name, last_name) VALUES ('John', 'Doe');

一次性插入多行:

INSERT INTO tbl_name VALUES (1, "row 1"), (2, "row 2");

使用SET子句插入行:

INSERT INTO person SET first_name = 'John', last_name = 'Doe';

从其他表中SELECT一些数据插入到该表中:

INSERT INTO contractor SELECT * FROM person WHERE status = 'c';

更多示例见INSERT ON DUPLICATE KEY UPDATEINSERT IGNORE

See Also

Comments

Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.