适用于EMP表的事务规则如下所示。给下面的每个规则设置各自的触发器。 【规则1】工作岗位不为SALESMAN的雇员不能有奖金(即,将其奖金列设置为0)。(这个限制对于已经在表EMP中存在的记录无效,它仅能约束对雇员表进行的插入雇员和更新雇员的操作)。 请拟定插入语句(自行拟定)和更新语句(将雇员号为251的员工的奖金更新为1000)进行测试,验证触发器是否成功触发! 【规则2】工资只能增长,不能下降,若更新后的工资低于之前的工资则保持原工资,并提示“工资只能增长,不能下降!”。 测试:雇员号为251的员工的当前工资为10000,将他的工资减少到8500,测试你的答案。
时间: 2024-03-22 22:40:05 浏览: 103
触发器的创建如下:
【规则1】触发器:
```
CREATE TRIGGER no_bonus
BEFORE UPDATE OR INSERT ON emp
FOR EACH ROW
BEGIN
IF NEW.job != 'SALESMAN' AND NEW.comm IS NOT NULL THEN
SET NEW.comm = 0;
END IF;
END;
```
【规则2】触发器:
```
CREATE TRIGGER no_salary_decrease
BEFORE UPDATE ON emp
FOR EACH ROW
BEGIN
IF NEW.sal < OLD.sal THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '工资只能增长,不能下降!';
SET NEW.sal = OLD.sal;
END IF;
END;
```
测试语句如下:
```
-- 插入语句
INSERT INTO emp(empno, ename, job, sal, deptno, comm)
VALUES(8001, 'Test1', 'CLERK', 2000, 10, 1000);
-- 更新语句
UPDATE emp SET comm = 1000 WHERE empno = 251;
-- 工资下降测试语句
UPDATE emp SET sal = 8500 WHERE empno = 251;
```
执行后,如果触发器成功触发,则在更新或插入时,工作岗位不为SALESMAN的员工将不会有奖金(奖金列会被设置为0),而且工资只能增长,不能下降。如果工资下降,则会提示“工资只能增长,不能下降!”,并且将工资恢复到之前的值。
阅读全文