批量更新,保存有效数据,返回有效数据

实例描述:

假设 对于某人信息的采集来自于多个途径,有手机,网址,客户端,采集到的信息如下 , 其中,date_type相同代表是同一个人,date_from代表采集的数据来自不同的途径 ,假设后台数据系统管理员会做如下操作,

1.查询到所有有效数据,对同属同一个人员的信息的 操作类型改为 "已修改" ,

2. 改操作必须修改 该用户下的所有操作类型, 对于数据类型为1的客户,如果只修改了前面两条的操作数据类型 , 系统不能让更新,既要么前端全部操作 全部更新数据成功,要么全部失败 

3. 存在的问题,同样date_type为1的用户数据有可能不在同一页中,那么肯定会存在漏更新操作类型的数据,那数据得校验出来,不能让非法数据更新

实例实现:

假设管理员已经把所有符合同一date_type的数据操作完成,那在后台中计算该date_type出现的次数 , 具体的该date_type在数据库中的具体数量交给 Sql来解决 , 在跟新的时候使用   exists 可以防止数据不正确时跟新报错,既保证了跟新正确的数据,返回有问题的数据 , 其中使用 having count(t.ID)=3 来校验管理员修改的数据数量是否和数据库存储的数量是否相等,如果不相等,则数据也不会跟新

/*批量更新*/
--批量更新前查出符合要求的数据
 SELECT t.ID   FROM date_operator t WHERE
 t.date_TYPE ='1'
 AND t.date_from IN ('网站','手机') 
 
--更新语句
update date_operator t2 set t2.operator_type='更新'
where exists(
   select 1  from date_operator t 
  WHERE 1=1
  and t.date_TYPE ='1'
  AND t.date_from  IN ('网站','手机') 
  AND t.date_TYPE=t2.date_TYPE
  having count(t.ID)=3 
)

 

2. 在xml中的可以使用selectKey  和 Befor获取更新成功的数据

    <update id="updateDate" parameterType="com.test.bean.date_operator">
	 <selectKey keyProperty='id' resultType='int' order='BEFORE'>
				 SELECT t.ID   FROM date_operator t WHERE
					 t.date_TYPE =#{date_TYPE}
					 AND t.date_from =#{date_from}  
					 
	  </selectKey>
		update date_operator t2 set t2.operator_type=#{operator_type}
			where exists(
			   select 1  from date_operator t 
			  WHERE 1=1
			  and t.date_TYPE =#{date_TYPE}
			  AND t.date_from  =#{date_from}  
			  AND t.date_TYPE=t2.date_TYPE
			  having count(t.ID)=#{count} 
			)
  </update>

3. 建表语句以及插入数据


create table date_operator
(
  ID          VARCHAR2(8),
  date_TYPE        NUMBER(4),
  date_from        VARCHAR2(32),
  operator_type    VARCHAR2(32)
)
 
  INSERT INTO date_operator VALUES ('1',1,'手机','新增');
INSERT INTO date_operator VALUES ('2',1,'网站','新增');
INSERT INTO date_operator VALUES ('3',1,'手机','新增');
INSERT INTO date_operator VALUES ('4',2,'客户端','新增');
INSERT INTO date_operator VALUES ('5',3,'手机','新增');

参考文章:https://blog.csdn.net/u012373815/article/details/73864866

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值