编写一个MySQL数据库触发器,当向“员工表”(Employee)中插入新记录时,触发器自动将新员工的初始薪资设置为该员工所在部门平均薪资的80%。

数据库表结构:
CREATE TABLE IF NOT EXISTSEmployee(EmployeeIDINT NOT NULL AUTO_INCREMENT,NameVARCHAR(100) NOT NULL,DepartmentIDINT NOT NULL,SalaryDECIMAL(10, 2) DEFAULT NULL, PRIMARY KEY (EmployeeID), FOREIGN KEY (DepartmentID) REFERENCESDepartment(DepartmentID) ); CREATE TABLE IF NOT EXISTSDepartment(DepartmentIDINT NOT NULL,DepartmentNameVARCHAR(100) NOT NULL, PRIMARY KEY (DepartmentID) );
触发器创建语句:
DELIMITER $$ CREATE TRIGGERSetInitialSalaryBeforeInsertBEFORE INSERT ONEmployeeFOR EACH ROW BEGIN DECLARE avg_salary DECIMAL(10, 2); 计算新员工所在部门的平均薪资 SELECT AVG(Salary) INTO avg_salary FROMEmployeeWHEREDepartmentID= NEW.DepartmentID; 将新员工的初始薪资设置为部门平均薪资的80% SET NEW.Salary = avg_salary * 0.8; END$$ DELIMITER ;
解释:
1、DELIMITER $$ 和DELIMITER ; 用于改变MySQL的默认语句分隔符,以便能够在触发器定义中使用分号。
2、CREATE TRIGGER 语句用于创建一个新触发器。

3、SetInitialSalaryBeforeInsert 是触发器的名称。
4、BEFORE INSERT ONEmployee FOR EACH ROW 表示触发器在向Employee表插入新记录之前执行。
5、BEGIN ... END 包含触发器的主体。
6、DECLARE avg_salary DECIMAL(10, 2); 声明一个变量用于存储部门平均薪资。
7、SELECT AVG(Salary) INTO avg_salary FROMEmployee WHEREDepartmentID = NEW.DepartmentID; 查询新员工所在部门的平均薪资,并将结果存储在avg_salary变量中。

8、SET NEW.Salary = avg_salary * 0.8; 将新员工的薪资设置为部门平均薪资的80%。
当向Employee表中插入新记录时,此触发器将自动执行,确保新员工的薪资符合要求。