MySQL触发器获取当前修改数据
MySQL触发器是一种在数据库表上定义的特殊类型的存储过程,它在特定的事件发生时被触发执行。利用触发器,我们可以在数据库表的插入、更新或删除操作发生时执行一些额外的逻辑。本文将重点介绍如何在MySQL触发器中获取当前修改的数据,并提供相应的代码示例。
触发器简介
触发器是通过定义在数据库表上的针对特定事件(如插入、更新、删除)的存储过程。它们是自动执行的,并且可以用于实现数据库的约束条件、数据校验、数据同步等操作。MySQL支持BEFORE和AFTER两种类型的触发器,它们分别指定了触发时间。
获取当前修改的数据
当触发器被执行时,我们有时候需要获取当前正在修改的数据,以便进行一些额外的操作。在MySQL中,可以使用OLD和NEW关键字来获取修改前后的数据。
- OLD关键字:用于获取旧数据,只能在UPDATE和DELETE触发器中使用。
- NEW关键字:用于获取新数据,只能在INSERT和UPDATE触发器中使用。
下面是一个示例表users
的结构:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
接下来,我们将演示如何在触发器中获取当前修改的数据。
获取插入的数据
在INSERT触发器中,可以使用NEW关键字来获取插入的数据。
DELIMITER //
CREATE TRIGGER after_insert_users
AFTER INSERT ON users
FOR EACH ROW
BEGIN
-- 获取插入的数据
DECLARE name VARCHAR(100);
DECLARE email VARCHAR(100);
SET name = NEW.name;
SET email = NEW.email;
-- 在控制台输出插入的数据
SELECT CONCAT('Inserted: ', name, ' ', email) AS message;
END //
DELIMITER ;
获取更新的数据
在UPDATE触发器中,可以使用OLD和NEW关键字来获取更新前后的数据。
DELIMITER //
CREATE TRIGGER after_update_users
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
-- 获取更新前后的数据
DECLARE oldName VARCHAR(100);
DECLARE newName VARCHAR(100);
SET oldName = OLD.name;
SET newName = NEW.name;
-- 在控制台输出更新前后的数据
SELECT CONCAT('Updated: ', oldName, ' => ', newName) AS message;
END //
DELIMITER ;
获取删除的数据
在DELETE触发器中,可以使用OLD关键字来获取删除的数据。
DELIMITER //
CREATE TRIGGER after_delete_users
AFTER DELETE ON users
FOR EACH ROW
BEGIN
-- 获取删除的数据
DECLARE name VARCHAR(100);
SET name = OLD.name;
-- 在控制台输出删除的数据
SELECT CONCAT('Deleted: ', name) AS message;
END //
DELIMITER ;
触发器示例
下面是一个完整的示例,展示了如何使用触发器获取当前修改的数据。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
DELIMITER //
CREATE TRIGGER after_insert_users
AFTER INSERT ON users
FOR EACH ROW
BEGIN
-- 获取插入的数据
DECLARE name VARCHAR(100);
DECLARE email VARCHAR(100);
SET name = NEW.name;
SET email = NEW.email;
-- 在控制台输出插入的数据
SELECT CONCAT('Inserted: ', name, ' ', email) AS message;
END //
CREATE TRIGGER after_update_users
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
-- 获取更新前后的数据
DECLARE oldName VARCHAR(100);
DECLARE newName VARCHAR(100);
SET oldName = OLD.name;
SET newName = NEW.name;
-- 在控制台输出更新前后的数据
SELECT CONCAT('Updated: ', oldName, ' => ', newName) AS message;
END //
CREATE TRIGGER after_delete_users
AFTER DELETE ON users
FOR EACH ROW
BEGIN
-- 获取删除的数据
DECLARE name VARCHAR(100);
SET name = OLD.name;
-- 在控制台输出删除的数据
SELECT CONCAT('Deleted: ', name) AS message;
END //
DELIMITER ;
INSERT INTO users (name