mysql必知必会--学习笔记(19)-- 触发器

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 语句。这表示不能从触发
器内调用存储过程。所需的存储过程代码需要复制到触发器内

你可能感兴趣的:(mysql)