MySQL触发器实例展示
一、触发器简介
MySQL触发器(Trigger)是MySQL提供的一种数据库对象,它可以在指定的表上执行特定的操作,当满足一定条件时自动执行。触发器可以在INSERT、UPDATE或DELETE操作之前或之后执行,并可以引用旧值和新值,从而执行更复杂的逻辑操作。
二、MySQL触发器实例展示
下面我们将通过一个具体的实例来展示MySQL触发器的使用方法。
假设我们有一个名为“employees”的员工表,其中包含员工的ID、姓名、工资等信息。我们希望在每次更新员工的工资时,自动将该员工的工资变化记录到另一个名为“salary_history”的表中。为此,我们可以使用MySQL的触发器来实现这一需求。
1. 创建salary_history表
首先,我们需要创建一个用于记录工资变化的表,即salary_history表。该表可以包含员工的ID、姓名、原工资和更新后的工资等信息。创建语句如下:
```sql
CREATE TABLE salary_history (
id INT PRIMARY KEY,
name VARCHAR(50),
old_salary DECIMAL(10, 2),

【创意礼盒/礼品套组】家居家日用品生活小百货3义乌小商地推品批5家用大全2活动礼品新售价:58.60元 领券价:58.6元 邮费:0.00
new_salary DECIMAL(10, 2),
change_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
2. 创建触发器
接下来,我们需要创建一个触发器,当在employees表上更新工资时自动执行。触发器可以在UPDATE操作之前或之后执行,这里我们选择在UPDATE操作之后执行。创建触发器的语句如下:
```sql
DELIMITER //
CREATE TRIGGER after_update_salary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_history (id, name, old_salary, new_salary)
VALUES (NEW.id, NEW.name, OLD.salary, NEW.salary);
END; //
DELIMITER ;
```
上述语句中,AFTER UPDATE ON employees表示该触发器在employees表上的UPDATE操作之后执行;FOR EACH ROW表示该触发器对每一行数据都会执行一次;BEGIN和END之间的语句为触发器要执行的SQL语句,这里我们使用INSERT语句将旧值和新值插入到salary_history表中。其中,NEW表示更新后的值,OLD表示更新前的值。需要注意的是,我们在INSERT语句中使用了OLD.salary和NEW.salary来引用更新前后的工资值。最后,我们使用DELIMITER命令将分隔符临时修改为//,以便在触发器语句中使用分号,然后再将分隔符修改为默认的分号。
3. 测试触发器
现在我们已经创建了一个触发器,接下来可以测试一下它的效果。我们可以先在employees表中插入一些员工数据,然后尝试更新某个员工的工资,最后查看salary_history表中是否记录了该员工的工资变化情况。例如:
插入员工数据:

【创意礼盒/礼品套组】家居家日用品生活店5小百货义乌小批实商品用2礼品元两1跳蚤市新售价:58.68元 领券价:58.68元 邮费:0.00
```sql
INSERT INTO employees (id, name, salary) VALUES (1, 'Alice', 5000);
```
更新员工工资:
```sql
UPDATE employees SET salary = 6000 WHERE id = 1; -- 将Alice的工资改为6000元。`(这里的where语句假设员工表中ID是唯一的,且此示例是仅更新一个ID的情况)`然后,你可以检查 `salary_history` 表来确认是否已经记录了Alice的工资变化情况:`SELECT * FROM salary_history;`。你应该能看到一条记录包含有Alice的ID、姓名、原始的薪水以及更新后的薪水(如`'1', 'Alice', '5000', '6000'`),同时它也会有一个默认的时间戳显示薪水变化的时间。`CHANGE_TIME`字段将记录下这个时间戳。这表明我们的触发器已经成功地在UPDATE操作后执行了。这样,每次我们更新员工的工资时,`salary_history`表就会自动记录下这些变化。这样既方便了我们的跟踪和管理,也确保了数据的完整性和可追溯性。这就是MySQL触发器的使用方法和一个简单的实例展示。在实际应用中,你可以根据具体需求来创建更复杂的触发器来满足你的需求。