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

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结束符是“;”结束。 1、 显示所有数据库 show databases; 2、 删除数据库 drop database dbName; 3、 创建数据库 create database [if not exists] dbName; 中括号部分可选的,判断该数据不存在就创建 4、 ...

    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> GRANT select, insert, delete,update  -> ON test.*  -> TO testuser@localhost;  Query OK, 0 rows affected (0.00 sec)  此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和...

    MYSQL常用命令大全

     mysql> GRANT select, insert, delete,update  -> ON test.*  -> TO testuser@localhost;  Query OK, 0 rows affected (0.00 sec)  此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和...

    mysql数据库操作

    update 表名 set 列1 =值1,列2 = 值2 where 条件; 不写条件就都修改了 4、查询数据: a:查询表中全部数据 select * from 表名; 四、查数据 1、基本语法 格式:select * from 表名; 说明: a、from关键字后面...

    mysql基础只是总结

    3、授权语法 grant 权限 on 数据库.表 to 用户@域名或者IP identified by '密码' 4、收回权限 revoke 权限 on 数据库.表 from 用户@域名或者IP max_queries_per_hour 每个小时最大查询的数 0没有限制 max_...

    MySQL关于ERROR 1290 (HY000)报错解决方法

    mysql> grant select,insert,update,delete on *.* to 'root'@'%'; ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement mysql> flush ...

    sql总结.doc

    (1)若视图的字段是来自字段表达式或常数,则不允许对此视图执行INSERT、UPDATE操作,允许执行DELETE操作; (2)若视图的字段是来自库函数,则此视图不允许更新; (3)若视图的定义中有GROUP BY子句或聚集函数时...

    SQL培训第一期

    用于操作关系型数据库对象内部的数据,insert、update、delete。 1.2.3 数据定义语言(DDL) 用来建立及定义数据表、字段以及索引等数据库结构,create、alter、drop 。 1.2.4 数据控制语言(DCL) 用于控制对数据库...

    Sql 语句详解

    2. SQL 语法 4 3. SQL SELECT 语句 5 4. SQL WHERE 子句 7 5. SQL AND & OR 运算符 8 6. SQL ORDER BY 子句 9 7. SQL INSERT INTO 语句 11 8. SQL UPDATE 语句 12 9. SQL DELETE 语句 13 10. SQL TOP 子句 13 11. ...

    经典全面的SQL语句大全

     DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  首先,简要介绍基础语句:  1、说明:创建数据库 CREATE DATABASE database-name  2、说明:删除...

    Hive用户指南(Hive_user_guide)_中文版.pdf

    3、 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及 查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。 4、 Hive 的数据存储在 HDFS 中,大部分的...

    ORM软件monalisa-orm.zip

    如果你觉得配置型SQL语法书写起来不太方便,该软件借用JSP编辑器来书写SQL, IDE能帮助你实现代码提示 如果你想尝试下新的ORM软件, 欢迎来使用! 5分钟演示视频 参考:例子工程 一行...

    Web应用程序框架DaoFramework.zip

     'driver' => 'mysql',  'choose' => 'local',  'database' => '17zan',  'prefix' => '',  'local' => require 'db_local.php',  'product' => require 'db_local.php',  ],  'redis' => ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句  数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询...

    2009达内SQL学习笔记

    使用IN操作符的优点: 在长的选项清单时,语法直观; 计算的次序容易管理; 比 OR 操作符清单执行更快;最大优点是可以包含其他 SELECT 语句,使用能够动态地建立 WHERE 子句。 如 SELECT prod_id,prod_price,prod...

    springmybatis

    Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'); 到此为止,前期准备工作就完成了。下面开始真正配置mybatis项目了。 1. 在MyBatis 里面创建两个源码目录,分别为 src_user,test_src, 用...

    SQL必知必会(第3版)--详细书签版

    5.1.2 OR操作符 26 5.1.3 计算次序 26 5.2 IN操作符 28 5.3 NOT操作符 29 5.4 小结 30 第6章 用通配符进行过滤 31 6.1 LIKE操作符 31 6.1.1 百分号(%)通配符 32 6.1.2 下划线(_)通配符 33 6.1.3 方括号...

    SQL必知必会(第3版-PDF清晰版)part1

    5.1.2 OR操作符..... 26 5.1.3 计算次序..... 26 5.2 IN操作符..... 28 5.3 NOT操作符..... 29 5.4 小结..... 30 第6章 用通配符进行过滤...... 31 6.1 LIKE操作符..... 31 6.1.1 百分号(%) 通配符..... 32 6.1.2...

Global site tag (gtag.js) - Google Analytics