如何使用mysql创建触发器_mysql触发器创建方法

来源:这里教程网 时间:2026-02-28 20:27:44 作者:

在MySQL中创建触发器,可以通过

CREATE TRIGGER
语句实现。触发器是一种与表相关联的数据库对象,它会在指定的表上执行INSERT、UPDATE或DELETE操作时自动触发。合理使用触发器可以实现数据的自动处理、日志记录、数据校验等功能。

了解触发器的基本语法

MySQL中创建触发器的标准语法如下:

CREATE TRIGGER trigger_name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_name
FOR EACH ROW
BEGIN
    -- 触发器执行的SQL语句
END;

说明:

trigger_name:触发器的名称,需在当前数据库中唯一。 BEFORE/AFTER:指定触发时机,可以在操作前或操作后触发。 INSERT/UPDATE/DELETE:指定触发事件类型。 table_name:关联的表名。 FOR EACH ROW:表示对每一行受影响的数据都执行一次触发器。 BEGIN ... END:用于包含多条SQL语句;如果只有一条语句,可省略。

创建一个简单的触发器示例

假设有一个员工表

employees
和一个日志表
employee_logs
,我们希望每次插入新员工时,自动记录操作时间。

建表示例:

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    salary DECIMAL(10,2)
);
<p>CREATE TABLE employee_logs (
log_id INT PRIMARY KEY AUTO_INCREMENT,
action VARCHAR(20),
action_time DATETIME
);</p>

创建触发器:

DELIMITER $$
CREATE TRIGGER after_employee_insert
AFTER INSERT ON employees
FOR EACH ROW 
BEGIN
    INSERT INTO employee_logs (action, action_time)
    VALUES ('New employee added', NOW());
END$$
DELIMITER ;

注意:使用

DELIMITER $$
是为了将语句结束符临时改为
$$
,避免MySQL将内部的分号误认为语句结束。定义完成后,再用
DELIMITER ;
改回默认分隔符。

使用NEW和OLD引用行数据

在触发器中,可以通过

NEW
OLD
来访问被操作的行数据:

NEW:表示即将插入或更新后的数据(INSERT、UPDATE中可用)。 OLD:表示删除前或更新前的数据(UPDATE、DELETE中可用)。

例如,在更新员工薪资时记录旧值和新值:

DELIMITER $$
CREATE TRIGGER before_salary_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
    IF NEW.salary != OLD.salary THEN
        INSERT INTO employee_logs (action, action_time)
        VALUES (CONCAT('Salary changed from ', OLD.salary, ' to ', NEW.salary), NOW());
    END IF;
END$$
DELIMITER ;

查看和删除触发器

查看当前数据库中的所有触发器:

SHOW TRIGGERS;

查看具体触发器定义:

SHOW CREATE TRIGGER trigger_name;

删除触发器:

DROP TRIGGER IF EXISTS trigger_name;

基本上就这些。掌握语法结构和使用场景,就能在实际开发中灵活运用MySQL触发器。注意避免在触发器中执行复杂逻辑,以免影响性能。

相关推荐

热文推荐