阅读量:0
编写一个MySQL数据库触发器,当向“员工表”(Employee)中插入新记录时,触发器自动将新员工的初始薪资设置为该员工所在部门平均薪资的80%。
数据库表结构:
CREATE TABLE IF NOT EXISTSEmployee
(EmployeeID
INT NOT NULL AUTO_INCREMENT,Name
VARCHAR(100) NOT NULL,DepartmentID
INT NOT NULL,Salary
DECIMAL(10, 2) DEFAULT NULL, PRIMARY KEY (EmployeeID
), FOREIGN KEY (DepartmentID
) REFERENCESDepartment
(DepartmentID
) ); CREATE TABLE IF NOT EXISTSDepartment
(DepartmentID
INT NOT NULL,DepartmentName
VARCHAR(100) NOT NULL, PRIMARY KEY (DepartmentID
) );
触发器创建语句:
DELIMITER $$ CREATE TRIGGERSetInitialSalaryBeforeInsert
BEFORE INSERT ONEmployee
FOR EACH ROW BEGIN DECLARE avg_salary DECIMAL(10, 2); 计算新员工所在部门的平均薪资 SELECT AVG(Salary
) INTO avg_salary FROMEmployee
WHEREDepartmentID
= NEW.DepartmentID; 将新员工的初始薪资设置为部门平均薪资的80% SET NEW.Salary = avg_salary * 0.8; END$$ DELIMITER ;
解释:
1、DELIMITER $$
和DELIMITER ;
用于改变MySQL的默认语句分隔符,以便能够在触发器定义中使用分号。
2、CREATE TRIGGER
语句用于创建一个新触发器。
3、SetInitialSalaryBeforeInsert
是触发器的名称。
4、BEFORE INSERT ON
Employee FOR EACH ROW
表示触发器在向Employee
表插入新记录之前执行。
5、BEGIN ... END
包含触发器的主体。
6、DECLARE avg_salary DECIMAL(10, 2);
声明一个变量用于存储部门平均薪资。
7、SELECT AVG(
Salary) INTO avg_salary FROM
Employee WHERE
DepartmentID = NEW.DepartmentID;
查询新员工所在部门的平均薪资,并将结果存储在avg_salary
变量中。
8、SET NEW.Salary = avg_salary * 0.8;
将新员工的薪资设置为部门平均薪资的80%。
当向Employee
表中插入新记录时,此触发器将自动执行,确保新员工的薪资符合要求。