`
qindongliang1922
  • 浏览: 2181009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117401
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125817
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59802
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71227
社区版块
存档分类
最新评论

MySQL的InsertOrUpdate语法

阅读更多

MySQL的插入语法提供了类似insertOrUpdate的语法,这种方式大部分存储系统都有类似的机制比如在Solr或者ElasticSearch中,如果主键一样的就更新,不一样就添加,只不过在数据库里可以是主键单个或多个字段,也可以是单个索引或多字段联合唯一索引,逻辑都一样。

比如表里面有id,age,name,address,score四个字段

联合唯一索引 是id+age+name(表里只有索引没有主键,后面单说)

向一张空表插入下面的数据

INSERT INTO person 
(id,age,name,address,score)
VALUES( 1, 18 , '张三' ,'洛阳',1) 
ON DUPLICATE KEY UPDATE 
name='王五',
address='北京海淀'
score = score + 1


第一次,由于这条数据的联合唯一索引不存在,所以会触发insert,不会触发update:

第一次表记录总量:1

1,18,张三,洛阳,1

然后执行第二次,由于联合唯一索引存在,所以会触发update,不会触发insert

第二次表记录总量:1

1,18,王五,北京海淀,2

继续执行第三次,由于联合唯一索引在第二步的name修改了,所以不存在联合唯一索引,那么这次会触发insert,不会触发update

第三次表记录总量:2

1,18,王五,北京海淀,2

1,18,张三,洛阳,1

最后执行第四次,这条SQL,由于唯一索引存在了,所以会触发update,但是在update的时候,发现已经有条数据了,所以会update失败,既这次不会对表的数据产生任何影响

第四次表记录总量:2

1,18,王五,北京海淀,2

1,18,张三,洛阳,1

注意

上面的联合唯一索引是id+age+name,如果其中某一个或或多个字段是唯一索引的同时,又是主键,那么更新的时候会优先以主键为准,判断联合主键是否存在,如果存在就更新,不存在就判断联合唯一索引是否存在,如果存在则更新,否则就添加,这一点需要注意


批量更新支持

执行insert或者update时,可以使用批量处理模式,如下面的语句,如果表里原来存在数据,那么久更新,更新的内容等于从VALUES取出来的,如果有累加的,score=score+1会把原来记录里面的值取出来然后+1在update回去。



INSERT INTO person 
(id,age,name,address,score)
VALUES( 1, 18 , '张三' ,'洛阳',1) 
VALUES( 2, 20 , '张三2' ,'邯郸',2) 
VALUES( 3, 30 , '张三3' ,'朝阳',3) 
VALUES( 4, 25 , '张三4' ,'济南',4) 
ON DUPLICATE KEY UPDATE 
name= VALUES(name)//从插入的值里面获取到,然后更新到新的列里面
,address=VALUES(address)//从插入的值里面获取到,然后更新到新的列里面
, score = score + 1//不加values代表从数据库已经存在的记录里面获取值然后+1更新


有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。

1
0
分享到:
评论

相关推荐

    MySQL语法语句大全

    MySQL 语法语句大全 MySQL 语法语句大全是一本很好的教材,为 MySQL 初级学者提供了详细的指南。本教材涵盖了 MySQL 的基本概念、SQL 语句、数据库设计、查询技术、索引优化、存储过程等方面的知识。 一、创建表 ...

    mysql如何实现 如果存在就update更新,不存在再insert插入.zip

    在这个`mybatis`配置中,`YourDomainClass`的属性将被映射到对应的列,`insertOrUpdate`方法会处理插入或更新操作。 要注意的是,`ON DUPLICATE KEY UPDATE`依赖于存在合适的唯一索引或主键。如果没有定义,MySQL将...

    MySQL语法大全(新)

    MySQL语法大全(新)这篇文章涉及了MySQL的基础知识和常用操作,适合于数据库开发人员和系统管理员作为日常工作的参考文档。文章中涉及的内容包括了从命令行连接MySQL数据库,到用户管理、数据库操作以及表的操作等...

    MYSQL语法参考手册参考大全

    MySQL支持SQL的四大基本操作:SELECT(查询)、INSERT(插入)、UPDATE(更新)和DELETE(删除)。在SQL语法中,我们学习如何创建、修改和删除数据表,以及如何检索、更新和删除数据。 二、数据类型 MySQL提供了...

    MYSQL 基础语法大全. 手动整理

    本资料主要涵盖了MySQL的基础语法,包括数据的增删改查、查询条件的使用、事务处理、字符集问题的解决、数据库的导入与导出以及用户权限管理和字符串拼接等核心概念。 1. **增删改查(CRUD)**: - **创建(Create...

    mysql语法学习

    MySQL 语法学习 MySQL 是一个关系型数据库管理系统,广泛应用于 Web 应用程序中。相比之下,SQL Server 是一个闭源的关系型数据库管理系统,由 Microsoft 公司开发。两者都支持标准的 SQL 语言,但是在语法和实现上...

    mysql数据库的基本操作语法

    ### MySQL数据库基本操作语法知识点详解 #### 一、常用查询操作 **1. 显示所有数据库** - **命令**: `SHOW DATABASES;` - **功能**: 列出当前MySQL服务器上存在的所有数据库。 **2. 删除数据库** - **命令**: ...

    mysql语法大全...........................................

    - **插入数据**: `INSERT` 命令用于向表中插入新的行数据。 - **更新数据**: `UPDATE` 命令用来修改表中已有的数据。 - **删除数据**: `DELETE` 命令用于删除表中的行。 - **选择数据**: `SELECT` 用于从表中检索...

    mysql语法操作

    MySQL是一种广泛使用的开源关系型数据库管理系统,其语法简洁明了,是许多开发者和系统管理员进行数据存储和管理的首选工具。以下是对MySQL语法操作的详细解释: 1. **安装与配置**: 在Linux环境下,MySQL通常...

    MySQL常用基础语法.docx

    MySQL 常用基础语法 MySQL 是一种关系型数据库管理系统,广泛应用于 Web 应用程序中。以下是 MySQL 的一些常用基础语法。 启动和关闭 * 启动 MySQL 服务:net start mysql * 关闭 MySQL 服务:net stop mysql * ...

    MySQL基础语法.docx

    MySQL 基础语法 MySQL 是一种关系型数据库管理系统,广泛应用于 Web 应用程序和移动应用程序中。 MySQL 的基础语法包括 DDL、DML 和 DQL 三个方面。 DDL 语句 DDL 语句用于定义和修改数据库结构,包括创建、修改...

    MySQL语法学习.zip

    下面将详细介绍MySQL的一些核心语法和概念。 1. **安装与配置**: 在开始学习MySQL语法之前,你需要在本地或服务器上安装MySQL。安装过程因操作系统而异,但通常包括下载安装包、运行安装向导、设置root用户密码等...

    mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )

    INSERT语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,…)] VALUES ({expr | DEFAULT},…),(…),… [ ON DUPLICATE KEY UPDATE col_name=expr, … ] 或: INSERT [LOW_...

    mysql触发器的作用及语法

    ### MySQL触发器的作用及语法详解 #### 一、触发器的概念 触发器是一种特殊类型的存储过程,它在特定的数据库事件(如数据插入、更新或删除)发生时自动执行。触发器增强了数据库的安全性和完整性控制,能够实现比...

    触发器mysql

    MySQL支持三种类型的触发器:BEFORE INSERT、AFTER INSERT、BEFORE UPDATE、AFTER UPDATE、BEFORE DELETE和AFTER DELETE。这些触发器分别在相应的DML操作之前或之后执行。例如,在上面的代码片段中,“before insert...

    mysql查询语句汇总基本语法.doc

    ### MySQL查询语句汇总基本语法 #### 一、基本SELECT查询 `SELECT`语句是MySQL中最基础也是最重要的部分之一,主要用于从数据库中选择数据。它的基本语法结构如下所示: ```sql SELECT column1, column2, ... FROM...

    mysql练手项目, mysql 项目实战

    你需要熟悉SELECT,INSERT,UPDATE,DELETE等基本语句,以及更复杂的JOIN,GROUP BY,HAVING,子查询和联接操作。了解如何使用WHERE,AND,OR,BETWEEN等逻辑操作符进行复杂查询。 3. **事务处理**:在MySQL中,...

    详解Mysql基础语法的使用

    本文将深入探讨MySQL的基础语法,帮助初学者更好地理解和使用MySQL。 首先,我们需要创建数据库。在MySQL中,使用`CREATE DATABASE`语句来创建一个新的数据库。例如,创建一个名为“my_database”的数据库,命令...

    MySQL触发器.pdf

    BEFORE INSERT OR UPDATE ON products FOR EACH ROW BEGIN IF NEW.price SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Price cannot be negative.'; END IF; END; // DELIMITER ; ``` 此触发器将在插入或更新...

Global site tag (gtag.js) - Google Analytics