

新闻资讯
技术学院答案:MySQL触发器在INSERT、UPDATE或DELETE操作时自动执行,用于数据校验、日志记录等;需遵循命名规范,避免复杂逻辑和递归触发,合理使用可提升数据管理能力但不宜过度依赖。
MySQL触发器是在特定表上执行INSERT、UPDATE或DELETE操作时自动触发的数据库对象。合理使用触发器可以实现数据完整性校验、日志记录、自动填充字段等功能。编写触发器需遵循一定的规范,以确保可读性、可维护性和性能。
创建触发器使用CREATE TRIGGER语句,基本语法如下:
CREATE TRIGGER trigger_name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_name
FOR EACH ROW
BEGIN
-- 触发器逻辑
END;
说明:
事件类型1. 自动更新修改时间字段
当某条记录被更新时,自动设置update_time为当前时间:
DELIMITER $$
CREATE TRIGGER update_user_update_time
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
SET NEW.update_time = NOW();
END$$
DELIMITER ;
2. 记录数据变更日志
将用户表的删除操作记录到日志表中:
-- 创建日志表
CREATE TABLE user_log (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
operation VARCHAR(10),
operator VARCHAR(50),
operate_time DATETIME
);
-- 创建触发器
DELIMITER $$
CREATE TRIGGER log_user_delete
AFTER DELETE ON users
FOR EACH ROW
BEGIN
INSERT INTO user_log (user_id, operation, operator, operate_time)
VALUES (OLD.id, 'DELETE', USER(), NOW());
END$$
DELIMITER ;
3. 数据校验:禁止删除管理员账户
DELIMITER $$
CREATE TRIGGER prevent_admin_delete
BEFORE DELETE ON users
FOR EACH ROW
BEGIN
IF OLD.role = 'admin' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '不允许删除管理员账户';
END IF;
END$$
DELIMITER ;
基本上就这些。掌握触发器的写法和使用场景,能有效提升数据库层面的数据管理能力,但也要注意不要过度依赖触发器,以免增加系统隐性复杂度。