Mysql 触发器 - 每次在另一个 table 中插入某项时,table 的字段增加 1
Mysql trigger-Increasing a table's field by 1 every time sth is inserted in another table
我有一名 table 名员工和一个部门。
DEPT(DEPTNO INT(2),DNAME VARCHAR(45),NO_EMP INT(5),PRIMARY KEY(DEPTNO));
EMP(EMPNO INT(3),EMPNAME VARCHAR(45),DEPTNO INT(2),PRIMARY KEY(EMPNO),
FOREIGN KEY(DEPTNO) REFERENCES DEPT (DEPTNO));
我希望 DEPT 的字段 NO_EMP 包含在该部门工作的员工人数。
CREATE TRIGGER EMPL
BEFORE INSERT ON EMP
FOR EACH ROW
UPDATE DEPT SET NO_EMP=1+IFNULL(0,NO_EMP) WHERE DEPT.DEPTNO=NEW.DEPTNO;
上面的触发器仅将 DEPT.NO_EMP 增加 1 once.It 并没有超过 '1'。我做错了什么?
你的ifnull()论点是倒退的。是 IFNULL(value_to_test, value_to_use_if_null)
。您正在测试 0
是否为空,而事实并非如此,因此您实际上在做
... SET NO_EMP = 1 + 0
你想要
... SET NO_EMP = IFNULL(NO_EMP, 0) + 1
相反,.
我有一名 table 名员工和一个部门。
DEPT(DEPTNO INT(2),DNAME VARCHAR(45),NO_EMP INT(5),PRIMARY KEY(DEPTNO));
EMP(EMPNO INT(3),EMPNAME VARCHAR(45),DEPTNO INT(2),PRIMARY KEY(EMPNO),
FOREIGN KEY(DEPTNO) REFERENCES DEPT (DEPTNO));
我希望 DEPT 的字段 NO_EMP 包含在该部门工作的员工人数。
CREATE TRIGGER EMPL
BEFORE INSERT ON EMP
FOR EACH ROW
UPDATE DEPT SET NO_EMP=1+IFNULL(0,NO_EMP) WHERE DEPT.DEPTNO=NEW.DEPTNO;
上面的触发器仅将 DEPT.NO_EMP 增加 1 once.It 并没有超过 '1'。我做错了什么?
你的ifnull()论点是倒退的。是 IFNULL(value_to_test, value_to_use_if_null)
。您正在测试 0
是否为空,而事实并非如此,因此您实际上在做
... SET NO_EMP = 1 + 0
你想要
... SET NO_EMP = IFNULL(NO_EMP, 0) + 1
相反,.