有表
producttype商品类型
主要字段: id ptname invokecount 引用次数……
product商品表
主要字段: productid unitid 计量单位编号 ptid 商品类型id invokecount 引用次数 ……
unittype计量单位表
主要字段: id code 基本计量单位编号 name 基本计量单位名称 invokecount 引用次数 ……
为了数据的完整性 我想做一个触发器:就是当商品类型中的某类型还存在商品时就不得删除该类型;同样当商品中有
商品引用了计量单位那么该计量单位也不得删除!所以我都加了字段invokecount 既是当invokecount 为0是方可删除;
否则每当添加一种商品那么producttype的 invokecount就加1,删除则减1;计量单位的一样!
请各位高手帮忙?谢谢……
producttype商品类型
主要字段: id ptname invokecount 引用次数……
product商品表
主要字段: productid unitid 计量单位编号 ptid 商品类型id invokecount 引用次数 ……
unittype计量单位表
主要字段: id code 基本计量单位编号 name 基本计量单位名称 invokecount 引用次数 ……
为了数据的完整性 我想做一个触发器:就是当商品类型中的某类型还存在商品时就不得删除该类型;同样当商品中有
商品引用了计量单位那么该计量单位也不得删除!所以我都加了字段invokecount 既是当invokecount 为0是方可删除;
否则每当添加一种商品那么producttype的 invokecount就加1,删除则减1;计量单位的一样!
请各位高手帮忙?谢谢……
解决方案 »
- 如何在程序启动时检查数据库中是否已经存在我需要的数据表
- 【安全】保护你的数据库安全
- 问个SQL语句..
- php+mysql的批量更新
- 为何我的 alter procedure 无法成功呢?官方文档明写着,有 alter procedure 这种语法呀?
- 帮帮我,windows下安装PostgreSQL最后老是出现这样的警告!
- 请各位高手看看这个存储过程有什么问题
- 求恢复mysql误删除记录方法或能恢复mysql数据的联系人,方式(国内)
- 关于Mysql
- 自增列想设成001、002、003->999 这种形式
- 请教perl-DBD-mysql-4.012-1.el5.rf.i386 包依赖问题!
- mysql在win2008 server下的64位驱动问题
FOR EACH ROW BEGIN
update producttype set invokecount=invokecount+1 where id=NEW.ptid;
update unittype set invokecount=invokecount+1 where id=NEW.unitid;
END;
-- 减1
CREATE TRIGGER testref2 AFTER DELETE ON product
FOR EACH ROW BEGIN
update producttype set invokecount=invokecount-1 where id=OLD.ptid;
update unittype set invokecount=invokecount-1 where id=OLD.unitid;
END;
普通的设计是在删除前检查一下相应表中是否有记录,而不是去维护这个引用计数器(当然操作系统设计中经常会这么干,但数据库设计中难得一见)你可以在 producttype商品类型 表的删除中或者用触发器,或者直接用直接来检查产品表中是否还有相应有记录。
商品引用了计量单位那么该计量单位也不得删除!
-----------------------------------------
我觉得你针对这样的需求设置字段invokecount 根本就有点不必要像你这种保持数据完整性的需求,我觉得用外键就可以实现了,没必要用触发器那么复杂alter table product商品表 add foreign key ptid 商品类型id references producttype商品类型(id);alter table product商品表 add foreign key unitid 计量单位编号 references unittype计量单位表 (id);
如果按他描述,这个invokecount 是没什么用的
如果支持外键的话,直接用外键可以处理了
否则,要分别在“表producttype商品类型”和“表unittype计量单位表”上建立delete触发器。
这样情况下建议一:你可以在 producttype商品类型 表的删除中或者用触发器,或者直接在你的程序中检查产品表中是否还有相应有记录。
二:使用外键约束,在exception中再检查哪个表中有对应的记录。然后提醒用户。
但是要用到innoDB引擎 这个引擎支持外键
4.你的需求应该在程序端判断
函数1:int[] query() 返回商品主表的id和count
查询用商品id分组
函数2:delete()
根据返回的count if 0
delete from shop table
delete from 从表
前提id相同
而且在相关表中都加了invokecount字段啦!
所以就让我们建触发器好在程序中中判断invokecount就可以啦!