標籤:nbsp stream mit rtt dao start cat man manager
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主從表的主表刪除資料