数据库触发器kb(spbh,spmc,spjg,rksl,rkrq) spbh,spmc,spjg,rksl,rkrq分别为商品编号,商品名称,商品价格,入库数量,入库日期,主键为商品编号,入库日期
时间: 2024-03-05 11:02:42 浏览: 132
好的,以下是MySQL数据库实现的触发器代码:
```mysql
DELIMITER // -- 改变语句结束符为 //
CREATE TRIGGER kb BEFORE INSERT ON SP
FOR EACH ROW
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count FROM SP WHERE SPBH = NEW.SPBH AND RKRQ = NEW.RKRQ;
IF count > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '同一商品不能在同一天多次入库!';
END IF;
END//
DELIMITER ; -- 恢复语句结束符为 ;
```
该触发器在SP表插入新记录之前执行。首先查询SP表中是否已经存在同一商品在同一天的记录,如果存在则抛出异常。如果不存在,则允许插入新记录。
希望这个触发器可以解决您的需求。
相关问题
ckb(spbh,cksl,ckrq) spbh,cksl,ckrq分别为商品编号,出库数量,出库日期,主键为商品编号,出库日期
好的,以下是MySQL数据库实现的触发器代码:
```mysql
DELIMITER // -- 改变语句结束符为 //
CREATE TRIGGER ckb BEFORE INSERT ON CK
FOR EACH ROW
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count FROM CK WHERE SPBH = NEW.SPBH AND CKRQ = NEW.CKRQ;
IF count > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '同一商品不能在同一天多次出库!';
END IF;
DECLARE kucun INT;
SELECT KUCUN INTO kucun FROM SP WHERE SPBH = NEW.SPBH;
IF kucun < NEW.CKSL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不足!';
END IF;
END//
DELIMITER ; -- 恢复语句结束符为 ;
```
该触发器在CK表插入新记录之前执行。首先查询CK表中是否已经存在同一商品在同一天的记录,如果存在则抛出异常。如果不存在,则继续查询SP表中该商品的库存是否足够出库数量,如果不足则抛出异常。如果库存足够,则允许插入新记录。
希望这个触发器可以解决您的需求。
阅读全文