商品(编号,品名,进价,库存,售价,厂商编号) 顾客(卡号,姓名,电话,积分) 厂商(编号,厂址,名称、电话) 销售(顾客卡号,商品编号,数量,日期) 建立商品的delete 触发器,只有当此商品没有人买时才可删除,若有销售记录不能删除。
时间: 2024-03-06 21:46:18 浏览: 74
基于C++(FLTK)实现(CS界面)超市收银系统【100010032】
您可以参考下面的 SQL 代码实现商品表的删除触发器:
```
CREATE TRIGGER trig_delete_product
BEFORE DELETE ON 商品
FOR EACH ROW
BEGIN
DECLARE count_sale INT;
SELECT COUNT(*) INTO count_sale FROM 销售 WHERE 商品编号 = OLD.编号;
IF (count_sale > 0) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该商品已有销售记录,无法删除!';
END IF;
END;
```
上述代码中,`BEFORE DELETE ON 商品` 表示在商品表执行删除操作之前触发该触发器;`FOR EACH ROW` 表示对于每个将被删除的行都会执行该触发器;`OLD` 是一个伪记录,代表即将被删除的记录。
该触发器会在删除商品记录时,先查询是否有销售记录与该商品相关联。如果有销售记录,则触发器会抛出一个异常,导致删除操作失败。如果没有销售记录,则触发器不会做任何操作,商品记录会被成功删除。
阅读全文