一.问题描述
在这个星期的开发终于到了一个问题,现在想一想就是一个简单的问题,我把他归纳为-----两表同删,今天来总结一下这个问题来加深一下印象.
问题:目前有两个表我们用t1和t2表示,t2表中的数据是从t1表中拿到的
如图:描述:我的逻辑是查出t1中没有删除的数据,然后再根据我们的唯一标识来循环insert到我们的t2表中,这个功能是没有问题的,但是我忽略了一个问题,当我们t1表中的一条数据已经删除了,但我们的t2表中已经存在这条数据了,我们t1表中删除的数据依然会在t2表中存在的,这就发生了问题
二.思考:
在我们删除t1表中数据的同时也应该把我们的t2表中的数据同时删掉,做到同步删除
三.代码表示一下:
首先来编写两条简单的sql:
update t1 set deleted=#{deleted} where id=#{id}
update t2 set deleted=#{deleted} where id=#{id}
业务层代码:
public Map<String, Object> del(Integer id, Integer deleted) {
Map<String, Object> data = new HashMap<>();
try {
// 删除信息
int resultTable1 = developMapper.updateTable1(id, deleted);
int resultTable2 = developMapper.updateTable2(id, deleted);
if(result == 0){
data.put("code",0);
data.put("msg","删除用户失败");
logger.error("删除用户失败");
return data;
}
data.put("code",1);
data.put("msg","删除用户成功");
logger.info("删除用户成功");
} catch (Exception e) {
logger.error("删除用户异常!", e);
}
return data;
}
四.解决问题:按代码执行顺序t1表删除完这条数据t2表也会删除这条数据