1. 触发器
需要在某个表发生更改时自动处理,这就是触发器。
2. 创建触发器
CREATE TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW SELECT 'Product added';
创建了一个叫newproduct的触发器,这个触发器在INSERT语句成功执行之后执行。
FOR EACH ROW 对于每个插入行都执行一次,显示 ”Product added“
只有表才能支持触发器,视图/临时表都不支持触发器
每个表最多支持六个触发器,即INSERT UPDATE DELETE前后
3. 删除触发器
DROP TRIGGER newproduct;
4. 使用触发器
4.1 INSERT触发器
- INSERT触发器代码内,可以引用一个名为NEW的虚拟表,访问被插入的行;
- BEFORE INSERT触发器中,NEW中的值可以被更新(允许更改准备插入的数据);
- 对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
CREATE TRIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;
每次插入数据之后返回订单号。订单号自增,不能再INSERT前打印订单号,只会显示0
4.2 DELETE触发器
- DELETE触发器代码内,可以引用一个OLD虚拟表,访问被删除数据;
- OLD中的值都是只读,不能更新。
CREATE TRGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW
BEGIN
INSERT INTO archive_orders(order_num, order_date, cust_id)
VALUES(OLD.order_num, OLD.order_date, OLD.cust_id);
END;
4.3 UPDATE触发器
- UPDATE触发器代码里,既可以访问OLD虚拟表,也可以访问NEW虚拟表
- BEFORE UPDATE触发器中,NEW中的值可以被更新
- OLD表中的所有值都是只读的。