在Navicat中,触发器(Trigger)是一种在特定数据库事件发生时自动执行的存储过程。以下是使用触发器批量修改数据的详细指南:
CREATE TRIGGER after_insert_trigger
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
-- 当有新订单插入时,更新客户表中的订单总数
UPDATE customers
SET order_count = order_count + 1
WHERE customer_id = NEW.customer_id;
END;
CREATE TRIGGER before_update_trigger
BEFORE UPDATE ON products
FOR EACH ROW
BEGIN
-- 当产品价格更新时,自动更新库存价值
SET NEW.inventory_value = NEW.price * NEW.quantity;
-- 记录价格变更历史
INSERT INTO price_history
(product_id, old_price, new_price, change_date)
VALUES (OLD.product_id, OLD.price, NEW.price, NOW());
END;
CREATE TRIGGER after_delete_trigger
AFTER DELETE ON departments
FOR EACH ROW
BEGIN
-- 当删除部门时,自动将该部门下的员工标记为未分配
UPDATE employees
SET department_id = NULL
WHERE department_id = OLD.department_id;
END;
使用NEW和OLD引用:
批量操作优化:
CREATE TRIGGER batch_update_after_insert
AFTER INSERT ON large_table
FOR EACH ROW
BEGIN
-- 使用WHERE子句限制批量更新的范围
UPDATE summary_table
SET total = total + NEW.amount
WHERE region_id = NEW.region_id;
END;
条件执行:
CREATE TRIGGER conditional_trigger
BEFORE UPDATE ON products
FOR EACH ROW
BEGIN
-- 只在特定条件下执行
IF NEW.price > OLD.price * 1.1 THEN
INSERT INTO price_alert (product_id, old_price, new_price)
VALUES (OLD.product_id, OLD.price, NEW.price);
END IF;
END;
通过合理使用触发器,您可以实现复杂的数据一致性维护和批量修改操作,而无需手动执行多条SQL语句。