@qq286531097
2017-03-10T07:29:06.000000Z
字数 1375
阅读 170
mysql
->是一种与表事件相关的特殊存储过程
tip:不能滥用,会造成应用的难以维护
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
简单描述
trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。
由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。
另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。
简单例子
DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
delete from tab2 where tab2_id=old.tab1_id;
END;
show triggers;
drop trigger 触发器名称
CREATE DATABASE atm;
a表
CREATE TABLE a (aid VARCHAR(20));
b表
CREATE TABLE b (bid VARCHAR(20));
a表
insert into a values ('1'),('2'),('3');
b表
insert into b values ('1'),('2'),('3');
create trigger test
after delete on a
for each row
delete from b where bid = old.aid;
关键字详解
在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;
使用方法: NEW.columnName (columnName 为相应数据表某一列名)
delete from a where aid = 1;
select * from a;
select * from b;
-》求1+2+3+4+...+1000,求累加的值。用PHP去实现
第一种方式
n = 1000; sum = 0;
for(i=1 ; n<1000; i++){
sum = sum + i
}
第二种方式
n = 1000; sum = 0;
sum = (1 + n) * n/2;
第一种算法复杂度 n;
第二种算法复杂度 1;
*触发器是一种特殊的存储过程
*里面可以写一些case then loop等更为复杂的语句,可以自行挖掘