MySQL触发器是一种特殊的存储过程,它在某个指定的事件(如INSERT、UPDATE或DELETE)发生时自动执行。游标则是一种在结果集中移动并处理每一行数据的方法。
MySQL触发器主要有以下几种类型:
触发器常用于以下场景:
假设我们有两个表source_table
和target_table
,结构相同。我们希望在source_table
中插入数据时,自动将这些数据插入到target_table
中。
DELIMITER $$
CREATE TRIGGER after_source_table_insert
AFTER INSERT
ON source_table FOR EACH ROW
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE cur_id INT;
DECLARE cur_data TEXT;
-- 创建游标
DECLARE cur CURSOR FOR SELECT id, data FROM source_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
read_loop: LOOP
FETCH cur INTO cur_id, cur_data;
IF done THEN
LEAVE read_loop;
END IF;
-- 插入数据到目标表
INSERT INTO target_table (id, data) VALUES (cur_id, cur_data);
END LOOP;
-- 关闭游标
CLOSE cur;
END$$
DELIMITER ;
请注意,上述示例代码中的触发器逻辑可能不是最优的,特别是对于大数据量的情况。在实际应用中,建议根据具体需求进行优化。
领取专属 10元无门槛券
手把手带您无忧上云