- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mysql 原生语句中save or update 的各种写法
在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert。 如果使用Hibernate,它自带saverOrUpdate方法,用起来很方便,但如使用原生sql语句呢?Mysql 原生语句中save or update 的各种写法背景??在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert。?如果使用Hibernate,它自带saverOrUpdate方法,用起来很方便,但如使用原生sql语句呢????新手最常见的写法是,先通过select语句查询记录是否存在,存在则使用update语句更新,不存在则使用insert语句插入。?但是这样做明显不够优雅,存在几个问题:为了执行一次更新操作,却在程序中使用了两次sql查询语句,在系统负载比较大的情况下,性能还是会有影响的。代码中存在if else语句,明明干了一件事,代码却很长。码农都是懒人,能把事情简单做的为啥要复杂做呢:)。那么问题来了,如何优雅的用sql语句实现saverOrUpdate???最近工作上也碰到类似更新数据的问题,写多了也开始觉得烦。记得Oracle下有Merge的写法,就google一下mysql的类似实现,整理如下:数据不存在则插入,存在则无操作?? 在insert语句中使用ignore关键字实现数据不存在则插入,存在则无操作。它的实现逻辑是,当插入语句出现主键冲突,或者唯一键冲突时,不抛出错误,直接忽略这条插入语句。官网上的相关介绍如下:If you use the IGNORE keyword, errors that occur while executing the INSERT statement are ignored. For example, without IGNORE, a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the statement is aborted. With IGNORE, the row is discarded and no error occurs. Ignored errors may generate warnings instead, although duplicate-key errors do not.Mysql官方文档中提供标准的语法:INSERT IGNORE INTO tbl_name [PARTITION (partition_name,...)] [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...或者INSERT IGNORE [INTO] tbl_name [PARTITION (partition_name,...)] [(col_name,...)]SELECT ...可见除了多了个IGNORE关键字以外,跟一般INSERT语句并无区别。举个栗子:1.建一张测试用的表CREATE TABLE `test_tab` ( `name` varchar(64) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;2.插入一条数据insert into `test_tab` (`name`,`age`) values (zhangsan,24) 当前test_tab表的数据为:?name|age?:—-|:—?zhangsan|24?3.再执行一次步骤2的插入语句,则会报异常:[Err] 1062 - Duplicate entry zhangsan for key PRIMARY4.对步骤2的insert语句增加ignore关键字,则不会报异常,已存在的数据也不会被更新。insert IGNORE into `test_tab` (`name`,`age`) values (zhangsan,24) ;------语句执行情况:受影响的行: 0时间: 0.000s当前test_tab表的数据为:?name|age?:—-|:—?zhangsan|24不存在则插入,存在则更新,其一(使用DUPLICATE KEY UPDATE关键字)?? 在insert语句中使用ON DUPLICATE KEY UPDATE关键字实现数据不存在则插入,
您可能关注的文档
- 大学英语课程教学要求 较高要求词汇1081个.doc
- 2009年6月英语四级考试真题及答案.doc
- 《德伯家的苔丝》之苔丝的悲剧透视.doc
- Unit 4 单词词组.docx
- Tangled script 长发公主 英文台词 整理版.doc
- 《自深深处》完美排版.docx
- 英语试题_796308488.docx
- 英语演讲例文.doc
- GMAT阅读词汇.doc
- 1984英文读后感.docx
- 七章货物的保险.pptx
- 三章国际间接投资.pptx
- 人性假设理论.pptx
- 外研高一英语必修三ModuleIntroduction汇总市公开课获奖课件省名师示范课获奖课件.pptx
- 月相成因优质获奖课件.pptx
- 小学二年级语文课件《狐假虎威》省名师优质课赛课获奖课件市赛课一等奖课件.pptx
- 养羊业概况专题知识讲座.pptx
- 微生物的实验室培养市公开课获奖课件省名师示范课获奖课件.pptx
- 人教版六年级下册式与方程整理与复习市公开课获奖课件省名师示范课获奖课件.pptx
- 必威体育精装版高中精品语文教学:第二单元-第7课-诗三首:涉江采芙蓉、-短歌行、归园田居市公开课获奖课件省名师.pptx
文档评论(0)