TRIGGER

触发器是在 INSERT、UPDATE、DELETE 语句前后自动执行的一段。

每个表每个事件每次只允许一个触发器,因此每个表最多支持 6 个触发器(每条 INSERT、UPDATE、DELETE 的之前和之后)。

实践

INSERT

MYSQL5以后,不允许触发器返回任何结果open in new window,而且缺乏返回的对比,不如为其新增一列。

DROP TRIGGER IF EXISTS orders_after_insert;

DELIMITER //

CREATE TRIGGER orders_after_insert
  AFTER INSERT ON orders
  FOR EACH ROW
BEGIN
    SELECT NEW.order_num INTO @order;
END//

DELIMITER ;

UPDATE

DROP TRIGGER IF EXISTS vendors_before_update;

DELIMITER //

CREATE TRIGGER vendors_before_update
  BEFORE UPDATE ON vendors
    FOR EACH ROW
BEGIN
    SET NEW.vend_state = upper(NEW.vend_state);
END//

DELIMITER ;