MySQL数据库触发器例题中,有哪些典型场景的触发器应用案例可以详细解析?

avatar
作者
筋斗云
阅读量:0

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

MySQL数据库触发器例题中,有哪些典型场景的触发器应用案例可以详细解析?

数据库表结构:

 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 语句用于创建一个新触发器。

MySQL数据库触发器例题中,有哪些典型场景的触发器应用案例可以详细解析?

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变量中。

MySQL数据库触发器例题中,有哪些典型场景的触发器应用案例可以详细解析?

8、SET NEW.Salary = avg_salary * 0.8; 将新员工的薪资设置为部门平均薪资的80%。

当向Employee表中插入新记录时,此触发器将自动执行,确保新员工的薪资符合要求。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!