注:一个数据库小白的成长之路
创建触发器
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语句,即不能从触发器内调用存储过程。