MySQL的InsertOrUpdate语法

MySQL的插入语法提供了类似insertOrUpdate的语法,这种方式大部分存储系统都有类似的机制比如在Solr或者ElasticSearch中,如果主键一样的就更新,不一样就添加,只不过在数据库里可以是主键单个或多个字段,也可以是单个索引或多字段联合唯一索引,逻辑都一样。 比如表里面有id,age,name,address,score四个字段 联合唯一索引 是id+age+name(表里只有索引没有主键,后面单说) 向一张空表插入下面的数据

Java代码

  1. INSERT INTO person
  2. (id,age,name,address,score)
  3. VALUES( 1, 18 , '张三' ,'洛阳',1)
  4. ON DUPLICATE KEY UPDATE
  5. name='王五',
  6. address='北京海淀'
  7. 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回去。

Java代码

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

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2016-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xcywt

学习SQLite之路(四)

20160621 更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite   a...

2178
来自专栏java学习

数据库介绍以及使用

第1章 数据库介绍 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以...

3634
来自专栏JavaEdge

MySQL必知必会分页whereupdatelimit字符串截取order by排序ength和char_lengthreplace函数1 键2 数据库事务的ACID3 视图4 删除连接

40214
来自专栏乐沙弥的世界

MongoDB 复合索引

如下图所示,在集合的userid以及score列上创建一个复合索引,其中userid为升序,score为降序

1241
来自专栏逸鹏说道

SQL Server 深入解析索引存储(上)

概述 最近要分享一个课件就重新把这块知识整理了一遍出来,篇幅有点长,想要理解的透彻还是要上机实践。 聚集索引 --创建测试数据库 CREATE DATABAS...

34913
来自专栏技术碎碎念

sql server 2008 数据库的完整性约束

一、数据库完整性概述 1.数据库的完整性: ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真...

3394
来自专栏技术博客

SQL知识点(一)

    主数据文件有且只有一个,二级数据文件0-N个     扩展名:主数据文件:MDF             二级数据文件:NDF */

1803
来自专栏互联网技术栈

MySQL EXPLAIN详解

MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令的使用及相关参数说明。

1649
来自专栏张善友的专栏

Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft ...

3368
来自专栏一个爱吃西瓜的程序员

学习SQL【2】-数据库与SQL

一:数据库是什么? 1:定义 ● 将大量数据通过计算机加工而成的可以进行高效访问的数据集合称为数据库(DB)。 ● 用来管理数据库的计算机系统称为数据库管理系...

3589

扫码关注云+社区

领取腾讯云代金券