-- 创建一个名为 `person` 的表
CREATE TABLE `person` (
`id` INT(11) NOT NULL AUTO_INCREMENT, -- 定义 id 列为整型,非空,自增
`name` VARCHAR(100) NOT NULL, -- 定义 name 列为可变字符型,最大长度100,非空
`age` INT(11) NOT NULL, -- 定义 age 列为整型,非空
PRIMARY KEY (`id`) -- 设置 id 列为主键
);
-- 更改分隔符,以便定义触发器
DELIMITER //
-- 创建一个名为 `trigger_insert_mytable` 的触发器
CREATE TRIGGER `trigger_insert_mytable`
BEFORE INSERT ON `person` -- 在 `person` 表插入数据之前触发
FOR EACH ROW -- 对每一行插入的数据执行触发器逻辑
BEGIN
-- 触发器逻辑部分,可以在此处编写需要执行的代码
-- 示例:将插入的数据的 name 字段转换为大写
SET NEW.name = UPPER(NEW.name); -- 使用 UPPER 函数将新插入的 name 字段转换为全大写
END // -- 结束触发器逻辑
DELIMITER ; -- 恢复默认分隔符
-- 创建一个名为 trigger_name 的触发器
CREATE TRIGGER trigger_name
BEFORE UPDATE ON table_name -- 在 table_name 表进行更新操作之前触发
FOR EACH ROW -- 对于每一行被更新的记录都会执行触发器逻辑
BEGIN
-- 触发器逻辑部分
-- 这里可以添加你需要执行的操作,例如验证数据、记录日志等
END;
-- 创建一个名为 trigger_name 的触发器
CREATE TRIGGER trigger_name
BEFORE DELETE ON table_name -- 在 table_name 表进行删除操作之前触发
FOR EACH ROW -- 对于每一行被删除的记录都会执行触发器逻辑
BEGIN
-- 触发器逻辑部分
-- 可以在这里添加代码,比如记录日志、检查条件等
END;
-- 创建一个名为 person_log 的表,用于记录人员变更日志
CREATE TABLE person_log (
id INT(11) NOT NULL AUTO_INCREMENT, -- 日志记录的唯一标识,自动递增
event_type VARCHAR(50) NOT NULL, -- 事件类型,例如 INSERT、UPDATE 等
event_time DATETIME NOT NULL, -- 事件发生的时间
person_id INT(11) NOT NULL, -- 相关人员的 ID
person_name VARCHAR(100) NOT NULL, -- 相关人员的姓名
person_age INT(11) NOT NULL, -- 相关人员的年龄
PRIMARY KEY (id) -- 将 id 列设置为主键
);
-- 创建一个触发器,当在 person 表中插入新记录后执行
CREATE TRIGGER trigger_insert_person
AFTER INSERT ON person -- 在 person 表插入操作后触发
FOR EACH ROW -- 每插入一行都会执行触发器
BEGIN
-- 记录变更日志,将插入事件的信息写入 person_log 表
INSERT INTO person_log (event_type, event_time, person_id, person_name, person_age)
VALUES ('INSERT', NOW(), NEW.id, NEW.name, NEW.age); -- 使用 NEW 关键字获取新插入行的数据
END;
触发器与存储过程的对比与选择详解说明表 触发器
存储过程
选择
触发器的性能和注意事项详解说明表 性能影响
死锁风险
触发器顺序
CREATE TRIGGER
语句的BEFORE
或AFTER
关键字进行调整 触发器的影响范围
权限
调试和测试