创建触发器,当向teacher表添加或删除数据时,department表中的人数num列的值做同步修改,添加一个教师num值加1, 删除一个教师num值减1。并对teacher表进行数据插入和删除操作验证触发器。 9、定义一个触发器,当teacher表的工资(salary)发生变化后,自动在工资变化表Sal_log(这个表需要自己建立 包括tno,tname,oldsal,newsal,changedate五个属性列,其中tno是教师编号,tname是教师姓名,oldsal是变化前的工资, newsal是
时间: 2024-02-15 08:02:53 浏览: 75
变化后的工资,changedate是变化时间)中插入一条记录,记录教师编号、教师姓名、变化前的工资、变化后的工资以及变化时间。具体代码实现如下:
```sql
-- 创建触发器,在向teacher表添加或删除数据时,同步修改department表中的人数num列的值
CREATE TRIGGER trg_sync_department_num
AFTER INSERT OR DELETE ON teacher
FOR EACH ROW
BEGIN
-- 添加教师,department表num值加1
IF NEW.tno IS NOT NULL THEN
UPDATE department SET num = num + 1 WHERE dno = NEW.dno;
END IF;
-- 删除教师,department表num值减1
IF OLD.tno IS NOT NULL THEN
UPDATE department SET num = num - 1 WHERE dno = OLD.dno;
END IF;
END;
-- 创建触发器,在teacher表的工资(salary)发生变化后,自动在工资变化表Sal_log中插入一条记录
CREATE TRIGGER trg_salary_change_log
AFTER UPDATE OF salary ON teacher
FOR EACH ROW
BEGIN
-- 插入记录到Sal_log表中
INSERT INTO Sal_log (tno, tname, oldsal, newsal, changedate)
VALUES (NEW.tno, NEW.tname, OLD.salary, NEW.salary, NOW());
END;
```
可以通过以下方式验证触发器是否生效:
1. 向teacher表中插入一条数据,检查department表中相应的num值是否加1;
2. 从teacher表中删除一条数据,检查department表中相应的num值是否减1;
3. 更新teacher表中的一条记录的salary字段,检查Sal_log表中是否插入了一条记录。
阅读全文