第二十五章 使用触发器

注:一个数据库小白的成长之路

创建触发器

CREATE TRIGGER newproduct
AFTER INSERT ON products
FOR EACH ROW SELECT 'Product added';
  • AFTER INSERT表示触发器将在INSERT语句成功执行后执行。
  • FOR EACH ROW表示代码对每个插入行执行。
  • Product added表示将对每个插入的行显示一次。

使用触发器

1.INSERT触发器

CREATE TRIGGER neworder 
AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;

当每插入一个新订单到orders表时,MySQL就生成一个新的订单号并保存到order_num中,而触发器就可以从NEW.order_num中取得这个值并返回它。

2.DELETE触发器

CREATE TRIGGER deleteorder 
BEFORE DELETE ON orders
FOR EACH ROW
BEGIN
    -- 创建表archive_orders
    CREATE TABLE archive_orders
    (
      order_num INT NOT NULL AUTO_INCREMENT,
      order_date DATETIME NOT NULL,
      cust_id INT NOT NULL,
      PRIMARY KEY (order_num)
    ) ENGINE = InnoDB;

    -- 把将要在表orders中删除的数据存在表archive_orders中
    INSERT INTO archive_orders(order_num, order_date, cust_id)
    VALUES(OLD.order_num, OLD.order_date, OLD.cust_id);
END;

3.UPDATE触发器

CREATE TRIGGER updatevendor 
BEFORE UPDATE ON vendors
FOR EACH ROW SET NEW.vend_state = Upper(NEW.vend_state);

注意

  • 只有表才支持触发器,视图与临时表均不支持。
  • 单一触发器不能与多个事件或多个表关联,所以如果需要一个对INSERT和UPDATE操作执行的触发器,则应该定义两个触发器。
  • 可以使用BEGIN和END语句编写触发器体,这样可以容纳多条SQL语句。
  • MySQL触发器中不支持CALL语句,即不能从触发器内调用存储过程。

你可能感兴趣的:(第二十五章 使用触发器)