触发器是一个特殊的存储过程,不同的是执行存储过程需要用call进行调用,而触发器的执行不需要被调用,只要当一个预定义的事件发生时,就会被mysql自动调用
创建触发器的语法
create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_stmt
其中trigger_name为创建的触发器的名称,这个是由自己进行定义的
trigger_time是触发时机可选值有before,after
trigger_event是触发事件(insert,delete,update)
table_name是建立触发器的表名
trigger_stmt是触发程序体
触发器的使用示范
建立表
create table account( acct_num int, amount decimal(10,2) );
创建触发器
set @sum = 0; create trigger ins_sum1 after insert on account for each row set @sum = @sum + new.amount;
@sum表示用户变量,使用set语句为其赋值,用户变量与连接有关。
触发器ins_sum的作用是向数据表中添加一个数据之前,对新插入的数据的account的字段进行求和计算
创建一个含多各执行语句的触发器
#建立相关数据表 create table test1(a1 int); create table test2(a2 int); create table test3(a3 int not null auto_increment primary key); create table test4(a4 int not null auto_increment primary key, b4 int default 0); #创建触发器 delimiter $ create trigger testref before insert on test1 for each row begin insert into test2 set a2 = new.a1; delete from test3 where a3 = new.a1; update test4 set b4 = b4 + 1 where a4 = new.a1; end$ #插入数据 delimiter $ create trigger testref before insert on test1 for each row begin insert into test2 set a2 = new.a1; delete from test3 where a3 = new.a1; update test4 set b4 = b4 + 1 where a4 = new.a1; end$ delimiter ; insert into test3(a3) values (null),(null),(null),(null),(null),(null),(null),(null); insert into test4(a4) values (0),(0),(0),(0),(0),(0),(0),(0); insert into test1(a1) values (1),(3),(1),(7),(1),(8),(4),(4); select * from test1; select * from test2; select * from test3; select * from test4; insert into test5(a4) values (0),(0),(0),(0),(0),(0),(0),(0);