Mysql 原生语句中save or update 的各种写法.docx

Mysql 原生语句中save or update 的各种写法.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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关键字实现数据不存在则插入,

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档