联表删除

sit bug:

        delete a, b from user_data_permission_map a
        left join data_permission b on a.permission_id = b.id
        where a.user_id = #{userId} and a.system_id = #{systemId} and b.category_id = #{categoryId}

表结构:
a表是用户、系统、数据权限映射表(不包含所属权限类别字段)
b表是数据权限表(包含所属权限类别字段)
事后分析:
这里本来只想删除某个用户在指定系统的指定权限类别下的所有数据权限,也就是只删除a表中的部分数据,结果用了delete a, b之后,不仅删除了a表中需要删除的数据,而且也删除了b表中该用户在选定系统下的所有数据权限,这就导致了严重的bug,最后改为delete a就好。比较低级的bug。不建议使用连表删除,容易出现意想不到的错误,推荐分开删除,然后用事务控制。
当时主要是参考了这篇博客,没经过严格的验证就上发布,会出大问题,以后吸取教训,网上的东西必须经过多轮检验才可以使用。

你可能感兴趣的:(联表删除)