MySQL基础之触发器和事件

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)

触发时间,指触发执行动作的时机,包括。在时间点,MySQL首先执行动作,之后返回操作结果。对于时间点,MySQL首先执行动作之后,再更新数据。

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触发器的语法和使用技巧。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签