加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_运城站长网 (https://www.0359zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

各数据库插入并更新

发布时间:2022-12-10 11:33:53 所属栏目:MySql教程 来源:
导读:  mysql:

  老生常谈的问题,业务中出现批量插入的操作,但是有些数据需要判断是否存在,存在则更新。

  那么在mysql当中,使用on duplicate key update是可以达到这个目的的!

  关于这个方法
  mysql:
 
  老生常谈的问题,业务中出现批量插入的操作,但是有些数据需要判断是否存在,存在则更新。
 
  那么在mysql当中,使用on duplicate key update是可以达到这个目的的!
 
  关于这个方法的使用,百度上已经有很多介绍,就不在这里赘述了。
 
  数据库插入操作_ajax技术如何同时向两个列数相同的表插入数据_power designer 插入数据
 
  图中定义的mergeRoleAllocationLastVehicleSql就是典型的判断插入或更新。前提是需要判断触发条件是否改变
 
  1.设置为主键发生了变化
 
  2.设置的唯一索引发生了变化,像图中我设置了code+area_manage_id为唯一联合索引,他们两有一个或多个的值一旦发生变化,数据就会插入,反之则进行更新,且更新的是update后追加的数据
 
  图中mergeRoleAllocationLastEnterpriseSql是典型的判断是否存在,存在则不操作,不存在则插入,出发条件同上述插入或更新操作。
 
  主要是留存一下使用过程中遇到的问题。
 
  1. 使用jdbctemplate来操作的数据库,那么动态sql的拼写上,需要注意字段名称相符,否则会报错
 
  Unknown column '***' in 'field list'
  此时还能遇到jdbctemplate的一个深坑问题,
 
  template.queryForList,这个方法不能返回list对象,只会获取单列值的list,例如一张表有十个字段,这个就只返回一个字段的所有list。。当你使用它来返回对象时,会报错类似下面的数据:
  Incorrect column count: expected 1, actual 10
  2. 数据表结构中,新增时间与更新时间字段一般都是会有的,默认给
 
  `create_datetime` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
    `update_datetime` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  会跟随数据更新修改对应时间。
 
  但是结合on duplicate key update使用的时候,如果所有的字段都是相同且已存在的,那么该条数据不会更新,时间也不会更新(主要是当时操作重复数据,时间一直未更新,还挠头了。。)
 
  DM数据库:
 
  DM作为国产数据库,插入并更新的操作,与db2相似。
 
  采用merge into的方式,以表中设置的主键或索引为判断条件,更新除此之外的其余字段,如果是新数据则插入。当然图中的sql定义比较粗糙,看看就好,自己如果是采用预定义的sql,可以采用stringbuilder去拼接数据库插入操作,减少对象创建。
 
  与mysql相同的地方是它遇到重复的数据,不会去主动更新,只有发现某字段或者某些字段变动
 

(编辑:开发网_运城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!