1、触发器
不能直接返回查询结果,意味着不能很实用select语句直接返回查询结果,可以select into 变量名存入变量中。
CREATE TRIGGER newproduct
AFTER INSERT ON products
FOR EACH ROW
select 'abc';
会报错。表明使用错误。
是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 BEGIN 和 END 语句之间的一组语句):
DELETE ; INSERT ;
UPDATE 。
2、保持每个数据库的触发器名唯一
3、创建触发器
CREATE TRIGGER newproduct
AFTER INSERT ON products
FOR EACH ROW
BEGIN
DECLARE str varchar(20);
SELECT 'Product added' INTO str;
INSERT INTO message(mess)
VALUES('insert succeed');
END;
4、仅支持表
只有表才支持触发器,视图不支持(临时表也不支持)。
5、删除触发器
DROP TRIGGER newproduct;
6、INSERT触发器
INSERT 触发器在 INSERT 语句执行之前或之后执行。需要知道以下几
点:
在 INSERT 触发器代码内,可引用一个名为 NEW 的虚拟表,访问被
插入的行;
在 BEFORE INSERT 触发器中, NEW 中的值也可以被更新(允许更改
被插入的值);
对于 AUTO_INCREMENT 列, NEW 在 INSERT 执行之前包含 0 ,在 INSERT
执行之后包含新的自动生成值。
7、DELETE触发器
DELETE 触发器在 DELETE 语句执行之前或之后执行。需要知道以下两
点:
在 DELETE 触发器代码内,你可以引用一个名为 OLD 的虚拟表,访
问被删除的行;
OLD 中的值全都是只读的,不能更新。
8、UPDATE触发器
UPDATE 触发器在 UPDATE 语句执行之前或之后执行。需要知道以下几
点:
在 UPDATE 触发器代码中,你可以引用一个名为 OLD 的虚拟表访问
以前( UPDATE 语句前)的值,引用一个名为 NEW 的虚拟表访问新
更新的值;
在 BEFORE UPDATE 触发器中, NEW 中的值可能也被更新(允许更改
将要用于 UPDATE 语句中的值);
OLD 中的值全都是只读的,不能更新。
9、遗憾的是,MySQL触发器中不支持 CALL 语句。这表示不能从触发
器内调用存储过程。所需的存储过程代码需要复制到触发器内