编写一个名为DELETE_SPJ的触发器,当SPJ表中有删除某条记录时,自动更新表SPJ_SUMQTY表。
时间: 2024-03-07 13:47:01 浏览: 60
好的,我来为您编写DELETE_SPJ触发器的代码:
```
CREATE TRIGGER DELETE_SPJ
AFTER DELETE ON SPJ
FOR EACH ROW
BEGIN
UPDATE SPJ_SUMQTY
SET SUMQTY = SUMQTY - OLD.QTY
WHERE SNO = OLD.SNO AND PNO = OLD.PNO AND JNO = OLD.JNO;
END;
```
以上代码会在 SPJ 表中有删除操作时触发,对应的 SPJ_SUMQTY 表中的记录进行更新。具体来说,当 SPJ 表中某条记录被删除时,触发器会将 SPJ_SUMQTY 表中对应的记录中的 SUMQTY 值减去该条记录中的 QTY 值,以实现自动更新功能。
相关问题
创建一个触发器,使得在S表中删除某条记录时,SPJ表中的数据也进行相应的删除操作。(创建触发器之前先去掉表的外键联系,这个触发器只是模拟一下级联删除操作)
好的,针对你的问题,我可以给出如下的触发器代码:
```
CREATE TRIGGER trig_del_S
AFTER DELETE ON S
FOR EACH ROW
BEGIN
DELETE FROM SPJ WHERE SNO = OLD.SNO;
END;
```
这个触发器会在S表中删除一条记录时自动被触发,然后删除SPJ表中与该记录关联的数据。需要注意的是,为了避免出现外键约束错误,我们需要在创建触发器之前先去掉表的外键联系。
5.创建一个供应历史表hspj(sno,pno,jno,qty,username,modifydate),记录供应变化情况。实现这样的约束控制:如果spj表中的某条供应记录发生改变,就在hspj表中插入一行历史记录,其中username为操作的用户名,modifydate为操作的时间。
可以使用触发器实现约束控制,具体步骤如下:
1. 创建hspj表,包含sno、pno、jno、qty、username、modifydate等字段。
2. 创建触发器,在spj表中添加、删除、更新记录时自动触发,触发器中插入对应的历史记录到hspj表中。
触发器代码如下:
```sql
CREATE TRIGGER tr_spj_change
AFTER INSERT OR UPDATE OR DELETE ON spj
FOR EACH ROW
BEGIN
IF (OLD.qty != NEW.qty OR OLD.sno != NEW.sno OR OLD.pno != NEW.pno OR OLD.jno != NEW.jno) THEN
INSERT INTO hspj(sno, pno, jno, qty, username, modifydate)
VALUES(OLD.sno, OLD.pno, OLD.jno, OLD.qty, USER(), NOW());
END IF;
END;
```
以上代码中,触发器在每次spj表中添加、更新、删除记录时自动触发。如果旧记录和新记录之间存在变化,则插入对应的历史记录到hspj表中。其中,USER()函数返回当前用户的用户名,NOW()函数返回当前时间。
阅读全文