CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。{ INSERT | UPDATE | DELETE } --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。ON <表名称> --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。<触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。例子1:在删除一条数据时,把删除的数据存到另一张表中。
create trigger sss //触发器的名字
after delete on user_role 要删除数据的表
for each row
begin
if old.overtime<curdate() then
insert into t_delete(uid,rid,overtime) values(old.uid,old.rid,old.overtime); //这里的封号不能省 old代表被删的数据
end if; //这里的封号不能省
end; //这里的封号不能省
例子2:在添加一条数据时,在另外一张表也添加相同数据
create trigger sss1 //触发器的名字
after into user_role (uid,rid,overtime) values('1','2','2015-1-1');
for each row
begin
if old.overtime<curdate() then
insert into t_delete(uid,rid,overtime) values(new.uid,new.rid,new.overtime); //这里的封号不能省 new代表刚刚添加的数据
end if; //这里的封号不能省
end; //这里的封号不能省
顺便附上SQL Server的触发器
SQL Server 全程都可以不加符号。
create trigger stu_ins //触发器名字
on stu //表
after delete
As
declare @age int select @age=age from deleted 删除是deleted
if(@age<=15)
begin
print '年龄符合要求'
end
else
begin
insert into t_xinxi(id,name,age) select * from deleted //这里要说明下 select * from deleted 这个有多少个字段就前面在插入的时候就的有几个
//insert into t_xinxi(name,age) select name,age from deleted 类是与这样
print '删除成功'
end