MySql主从表的主表删除数据

Posted 133261c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql主从表的主表删除数据相关的知识,希望对你有一定的参考价值。

1.第一种:

解除主从表的约束关键

一般来说,在我们给主表添加外键时,切记要设计“外键名称”,以便于日后可以删除外键约束。

  声明外键约束语法:

alter table 从表名 add [constraint] [外键名称] foreign key(从表中的外键字段名) references 主表(主表的主键);

  删除外键约束:

alter table 从表名 drop foreign key 外键名称;

2.第二种:

先删除从表中与主表有关系的数据,再删除主表中的数据(具体自己操作)。

       //1.开启事务
            DataSourceUtils.startTransaction();

            //2.更新商品 把从表中与主表中有关系的数据度删除
            ProductDao pd=(ProductDao) BeanFactory.getBean("ProductDao");
            pd.updateCid(cid);
            
            //3.删除分类 才能对主表进行删除
            CategoryDao cd=(CategoryDao) BeanFactory.getBean("CategoryDao");
            cd.delete(cid);
            
            //4.事务控制
            DataSourceUtils.commitAndClose();
            
            //5.清空缓存
            CacheManager cm = CacheManager.create(CategoryServiceImpl.class.getClassLoader().getResourceAsStream("ehcache.xml"));
            Cache cache = cm.getCache("categoryCache");
            cache.remove("clist");

  updateCid方法为: 

 

    /**
     * 更新商品的cid 为删除分类的时候准备
     */
    @Override
    public void updateCid(String cid) throws Exception {
        QueryRunner qr = new QueryRunner();
        //把要删除的从表中的数据的外键置为与主表中无关的数据
        String sql="update product set cid = null where cid = ?";
        qr.update(DataSourceUtils.getConnection(), sql, cid);
    }

 

  cd.delete(cid)方法为:

    /**
     * 删除分类
     */
    @Override
    public void delete(String cid) throws Exception {
        QueryRunner qr = new QueryRunner();
        String sql="delete from category where cid = ?";
        qr.update(DataSourceUtils.getConnection(), sql, cid);
        
    }        

 

以上是关于MySql主从表的主表删除数据的主要内容,如果未能解决你的问题,请参考以下文章

一次主从表集成流程开发过程

dbeaver如何进行级联删除和修改

hibernate表关系

sql server 2008 主从数据库 中断后怎么同步

mysql 外键理解

PL/SQL详细介绍,设置oracle相关