1. 什么是MySQL触发器
MySQL触发器是一种特殊的存储过程,它在一个定义的表上被自动执行。当一个触发器被触发时,MySQL会自动执行预定义的动作。
触发器是一种被动的增加、修改或删除表中数据的方法。它不像存储过程那样需要手动执行,而是由MySQL自动执行。触发器由MySQL事件驱动,当满足某些条件时,由MySQL自动触发执行。
2. MySQL触发器的语法格式
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name
FOR EACH ROW
trigger_stmt
2.1 触发器名称(trigger_name)
触发器名称必须是唯一的。 MySQL支持多个触发器,但同一张表或同一事件,只能有一种触发条件。
2.2 触发时间(trigger_time)
触发时间,指触发执行动作的时机,包括
2.3 触发事件(trigger_event)
触发事件决定了MySQL何时触发触发器执行。MySQL支持
2.4 表名(table_name)
表名,指需要触发器支持的表名。在这个表上执行相关的操作时会触发触发器。
2.5 触发语句(trigger_stmt)
触发语句,指执行相关操作。MySQL支持多行语句和复杂语句。
3. MySQL触发器的使用示例
以一个示例表employee
为例,它包含id, name, age, sex, salary
等字段。 需求如下,如果数据包含高薪(salary > 5000)员工的新建、修改和删除,则需要记录变更日志。
/*创建employee表*/
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` smallint(6) NOT NULL,
`sex` enum('male','female') NOT NULL,
`salary` decimal(10,2) NOT NULL,
PRIMARY KEY (`id`)
);
/*创建employee_log表*/
CREATE TABLE `employee_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`record_id` int(11) NOT NULL,
`operation_type` varchar(10) NOT NULL,
`operation_time` datetime NOT NULL,
PRIMARY KEY (`id`)
);
/*创建触发器*/
CREATE TRIGGER `employee_trigger` AFTER INSERT, UPDATE, DELETE ON `employee` FOR EACH ROW
BEGIN
/*插入日志记录*/
IF OLD.salary <= 5000 AND NEW.salary > 5000 THEN
INSERT INTO employee_log (record_id, operation_type, operation_time)
VALUES (NEW.id, 'salary increase', NOW());
END IF;
END;
以上就是一个简单的MySQL触发器的例子。每当employee
表中数据发生变更且符合规定时,MySQL会通过触发器自动记录日志。
4. 小结
MySQL触发器是一个强大的数据库功能,使用它可以更轻松地实现一些数据操作,更好地管理数据库。通过上述说明和示例,可以更好地掌握MySQL触发器的语法和使用技巧。