mysql更新子表时,除了用先删后增的方式,还有什么其他方法?请看描述。

比如我现在有个文章表和一个文章标签表(关联表)。

一篇文章对应着n个标签(n不定)(标签存储的是id)。

若用户修改了文章的标签,我现在的办法是先删除关联表的关联数据,然后再新增关联数据。

这种方法是否可行?还有其他方法可以解决这个问题吗?

阅读 6.6k
4 个回答

有三种
第一:replace into 但是问题多多
第二:你这种
第三:更新子表时分为delete删除原来有的、update更新原来有的、insert插入原来没有的这三种操作

这是比较简单但是效果好的做法‘缺点是子表的自增键会容易加上去

复杂一点的话 先查出库里走的子表数据列表,和提交的列表比对。多出来的加到库里’少了的删除

List<Integer> oldList = Lists.newArrayList(1, 2, 3, 4);
        List<Integer> newList = Lists.newArrayList(1, 3, 5, 7);
        List<Integer> oldListCopy = Lists.newArrayList();
        oldListCopy.addAll(oldList);
        //获取被删除的标签
        oldList.removeAll(newList);
        //获取新增的标签
        newList.removeAll(oldListCopy);
        //删除id在oldList里的标签
        //添加newList里的标签

一般来说都是这么干的

INSERT INTO `news_relation`(`news_id`, `tag_id`) VALUES(100, 1), (100, 2) ON DUPLICATE KEY UPDATE `news_id`=VALUES(`news_id`);

DELETE FROM `news_relation` WHERE `news_id`=100 AND `tag_id` NOT IN(1, 2);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏