MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/mysql-insert-query.html

MySQL 插入/添加数据语句(INSERT INTO)用法详解


MySQL 插入数据操作使用 INSERT INTO 语句,它属于 DML(数据操作语言)范畴,该语句插入方式支持从简单的添加操作到唯一键(唯一索引)冲突时的更新操作,同时也支持查询结果直接插入操作。

INSERT INTO

MySQL INSERT 语句主要三种形式,明确指定的值进行插入的 INSERT ... VALUES ...INSERT ... SET ...,还有一种形式是从另一个表或多个表中的查询结果作为插入的值,以 INSERT ... SELECT ... 格式。

语法

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    INTO tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    {VALUES | VALUE} (value_list) [, (value_list)] ...
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    INTO tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    SET assignment_list
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    INTO tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    SELECT ...
    [ON DUPLICATE KEY UPDATE assignment_list]

修饰符

INSERT 语句支持修饰符主要如下:

IGNORE
顾名思义插入忽略的操作,如果要插入的数据和现有的唯一索引(unique index)或主键(primary key)冲突(已存在),则该插入值操作忽略;若省略 IGNORE 修饰符时,键冲突时,会报失败错误。
ON DUPLICATE KEY UPDATE
和 IGNORE 用法相反,当插入的数据和唯一键值或主键冲突时,进行更新操作,此时返回的受影响的行数为 2;若键值不冲突,则执行普通的插入操作,受影响的行数为 1;还有一种特殊情况是键值冲突进行更新时,若要更新的数据和原有的数据一样,受影响行数返回 0,即第一种的特殊情况。此修饰符的作用,通俗的讲就是“记录存在则更新,不存在则插入”。

关于如上两个修饰符 IGNORE 和  ON DUPLICATE KEY UPDATE,需要使用者注意的是,如果插入数据时,真正触发由于唯一键冲突导致忽略或进行修改操作时,如果操作表还有自增 id,将会导致后续的新插入数据自增 id 不连续,这是因为虽然忽略或 UPDATE 了,但是自增 id 同时也分配到了。

示例

mysql> INSERT INTO knowledgedict_tbl (title, content) VALUES ('knowledge', 'dict');

如上语句等同于如下语句:

mysql> INSERT INTO knowledgedict_tbl SET title = 'knowledge', content = 'dict';

如果从其它表导入数据,示例如下:

mysql> INSERT INTO knowledgedict_tbl (title, content) SELECT article_title, article_content FROM other_tbl;

此外,如果插入的数据和已有数据冲突(唯一键冲突)时,可以通过 IGNORE 和 ON DUPLICATE KEY UPDATE 两种操作方式选择是忽略还是进行修改动作。

假设 title 字段是唯一索引,即数据不可重复;

若忽略操作:

mysql> INSERT IGNORE INTO knowledgedict_tbl (title, content) VALUES ('knowledge', 'dict');

若更新操作:

mysql> INSERT INTO knowledgedict_tbl (title, content) VALUES ('knowledge', 'dict') ON DUPLICATE KEY UPDATE title = VALUES(title), content = VALUES(content);

相关推荐

  • INSERT INTO ... ON DUPLICATE KEY UPDATE 语句更新操作如何增加条件操作
插入是向 MongoDB 中添加数据的基本方法。MongoDB 主要使用 db.collection.insert() 方法向目标集合创建文 ...
MySQL 删除数据操作使用 DELETE FROM 语句,它属于 DML(数据操作语言)范畴,DELETE 语句是一行一行地进行删除操作, ...
mysql 中,插入数据的 sql 有很多种形式,除了标准 sql 支持的 INSERT INTO table_name (col1, co ...
Mybatis 的 insert 语句操作相比 select 简单的多。只有让它返回主键值时,由于不同数据库的主键生成方式不同,这种情况下会 ...
在Hive中,INSERTOVERWRITE和INSERTINTO是用于将数据加载到表中的两种常见方式。示例代码:INSERTOVERWRI ...