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 语句更新操作如何增加条件操作

mysql插入语句例句_MySQL 插入/添加数据语句(INSERT INTO)用法详解相关推荐

  1. mysql字段类型原理_mysql数据类型和字段属性原理与用法详解

    本文实例讲述了mysql数据类型和字段属性.分享给大家供大家参考,具体如下: 本文内容: 数据类型 数值类型 整数型 浮点型 定点型 日期时间类型 字符串类型 补充: 显示宽度与zerofll 记录长 ...

  2. python dataframe index loc_基于DataFrame筛选数据与loc的用法详解

    DataFrame筛选数据与loc用法 python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作.运算.统计等功能. 如何从一个DataFrame中筛选中出一个元素呢. ...

  3. mysql添加新的实例_MySQL中添加新用户权限的实例详解

    有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表.比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些. 下面的例子显示出如何使用MySQL客户安装新用户. ...

  4. mysql myisam 行锁_MySQL MYISAM引擎表锁和行锁详解

    MySQL有三种锁:表级锁.行级锁和页面锁.BDB支持页面锁,MyISAM支持表级锁,而innoDB则支持表锁和行级锁.这篇文章主要介绍MYISAM引擎的表锁. 表锁分为读锁(read lock)和写 ...

  5. mysql b tree图_MySQL索引--B-Tree(B+Tree)图文详解

    看了很多关于索引的博客,讲的大同小异.但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等 ...

  6. mysql数据库帐户_MySQL数据库用户帐号管理基础知识详解

    MySQL管理员应该知道怎样通过指定哪些用户可连接到服务器.从哪里进行连接,以及在连接 时做什么,来设置MySQL用户账号.MySQL3.22.11引入了两个更容易进行这项工作的语句:GRANT 语句 ...

  7. mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解

    本文实例讲述了MySQL使用集合函数进行查询操作.分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SELECT ...

  8. popup弹出html页面,Popup弹出框绑定添加数据事件(步奏详解)

    这次给大家带来Popup弹出框绑定添加数据事件(步奏详解),Popup弹出框绑定添加数据事件的注意事项有哪些,下面就是实战案例,一起来看一下. 逻辑 窗口P1中显示一组数据,并提供一个添加按钮 点击按 ...

  9. JAVA循环与分支语句edu_Java分支结构和循环结构原理与用法详解

    本文实例讲述了Java分支结构和循环结构.分享给大家供大家参考,具体如下: 流程控制分类 顺序语句:从上到下按顺序依次执行 分支语句:根据条件不同,执行不同语句 循环语句:重复执行某些动作 单分支条件 ...

最新文章

  1. 近期必读的6篇NeurIPS 2019零样本学习论文
  2. Android下常见终端模拟器和SSH客户端感受及几个Tips
  3. java中常用的定位方式有哪些_java-selenium八种元素定位方式
  4. 【AWSL】之Linux账号和权限管理(/etc/passwd、/etc/shadow、useradd、passwd、usermod、groupadd、gpasswd...chmod、chown)
  5. 鸿蒙系统有无隐私空间,华为鸿蒙OS系统有隐私空间功能吗 华为p40使用鸿蒙系统体验评测...
  6. 什么是mysql的主从复制?
  7. Mr.J--C99标准之数组问题
  8. oracle出错如何备份数据,Oracle数据库备份失败, 出错代码:0xe0001402
  9. fork() 和 vfork()
  10. 在eclipse里如何快速定位到某一行?
  11. JS基础--ES5创建对象的7种模式
  12. mybatis中prefix,suffix,prefixOverrides,suffixOverrides用法解释
  13. ajax显示失败信息,javascript
  14. 图像转换 - base64
  15. vue如何设置视频封面_vue设置视频封面教程 vue如何修改标题
  16. matlab中根号的表示方法,Matlab中根号表示方法分享
  17. 变异系数(Coefficient of Variation,COV)和协方差(Covariance, Cov)
  18. 高可用架构演进之单元化
  19. 计算H时M分S秒以后是_关于工程量计算-深圳工程量计算培训
  20. c# 检测中英输入法_用C#控制当前输入法

热门文章

  1. .NET MAUI 中自定义控件
  2. Python日常-女神要减肥,我打辅助!
  3. 超级计算机耗电多少钱,超级计算机功耗问题需注意
  4. 幽灵交易策略_期货软件TB系统源代码解:幽灵交易者交易策略
  5. 广联达综合面(测试类)
  6. SpringBoot实现多数据源,动态数据源自由切换
  7. JAVA街机雷电,经典街机雷电移植大作――正版雷电
  8. 将JPG转成PDF的方法
  9. 卧槽!原来 IOC 这么简单
  10. Unity集成ShareSDK一键分享