MYSQL基础——触发器
引入触发器
什么是触发器
如果你想要某条语句(或某些语句)在事件发生时自动执行。比如: 每当订购一个产品时,都从库存数量中减去订购的数量;无论何时删除一行,都在某个存档表中保留一个副本。就需要用到触发器。触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):
? DELETE;
? INSERT;
? UPDATE;
说明:
其他MySQL语句不支持触发器。只有表才支持触发器、视图不支持,临时表也不支持。
创建触发器
触发器用CREATE TRIGGER 语句创建,一条伪代码如下:
CREATE TRIGGER newType AFTER INSERT ON ms_articletype for each row select ‘Product Added‘; Error Code: 1415. Not allowed to return a result set from a trigger
创建一个触发器需要给出4条信息:
- 唯一的触发器名 newType
- 触发器关联的表 ms_articletype
- 触发器应该响应的活动 DELETE、INSERT、UPDATE
- 触发器何时执行(AFTER、BEFORE)
删除触发器:
触发器不支持更新或者覆盖,为了修改一个触发器,必须先删除它,然后重新创建它。
DROP TRIGGER newtype;
使用触发器
INSERT触发器
INSERT触发器在INSERT语句执行之前或者之后执行,需要知道以下几点:
- 在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行。
- 在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值)。即,通过NEW来修改被插入的数据。
- 对于AUTO_INCRMENT列,NEW在INSERT执行之前包含0,在执行之后包含新的自动生成值。
实例:
DELETE触发器
说明:
- 在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行。
- OLD表中的数据全是只读的,不能被修改。
实例:
UPDATE触发器
说明:
- 在UPDATE中,你可以使用OLD和NEW两张表。
- 在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值)
- OLD表中的值是只读的,不可以被更改。
实例:
时间: 2024-10-30 02:24:53