触发器
触发器主要用于监视某个表的insert、update以及delete等更新操作,这些操作可以分别激活该表的insert、update或者delete类型的触发程序运行,从而实现数据的自动维护。
一、创建一个触发器
使用create trigger语句可以创建一个触发器
语法格式如下:
create trigger 触发器名 触发时间 触发事件
on 表名
for each row
begin
触发程序
end
·MySQL的触发事件有三种:
insert:将新记录插入表时激活触发程序
update:更改某一行记录时激活触发程序
delete:从表中删除某一行记录时激活触发程序
·触发器的触发时间有两种:
before表示在触发事件发生之前执行触发程序。
after表示在触发事件发生之后执行触发器。
因此,由触发器的时间和触发器的时间可以看出一个数据库表最多可以设置六种类型的触发器。
现将两张表建立好,一张student表、一张people表,在student表中增加一条李四的信息,通过触发器在people表中也增加了一条信息
//创建只有一个执行语句的触发器触发器,此时begin和end可以省略。
//删除触发器,触发器只有一条执行语句
DROP TRIGGER stu_in ;
·触发程序中可以使用old关键字与new关键字:
当向表插入新记录时,在触发程序中可以使用new关键字表示新记录,当需要访问新记录的某个字段值时,可以使用“new.字段名”的方式访问。
当从表中删除某条旧记录时,在触发程序中可以使用old关键字表示旧记录,当需要访问旧记录的某个字段值时,可以使用“old.字段名”的方式访问。
当修改表的某条记录时,在触发程序中可以使用old关键字表示修改前的旧记录、使用new关键字表示修改后的新记录。当需要访问旧记录的某个字段值时,可以使用“old.字段名”的方式访问。当需要访问修改后的新记录的某个字段值时,可以使用“new.字段名”的方式访问。
1、使用new关键字
insert的触发事件
insert into student (stuname,stuage) values ('李四',23);
//创建有多个执行语句的触发器。这时候多条语句要用begin end 包起来。组成语句块。
//在student表上建立insert触发器,当在student表中插入一条数据时,通过触发器在people表中插入一条数据,并将people表中id=1的信息删除掉。
insert的触发事件
insert into student (stuname,stuage) values ('李四',23);
使用下面方法查看触发器的定义。
1、SHOW TRIGGERS;
2、查询information_schema数据库中的triggers表,可以查看触发器的定义
删除触发器
DROP TRIGGER stu_in3;
触发器主要用于监视某个表的insert、update以及delete等更新操作,这些操作可以分别激活该表的insert、update或者delete类型的触发程序运行,从而实现数据的自动维护。
一、创建一个触发器
使用create trigger语句可以创建一个触发器
语法格式如下:
create trigger 触发器名 触发时间 触发事件
on 表名
for each row
begin
触发程序
end
·MySQL的触发事件有三种:
insert:将新记录插入表时激活触发程序
update:更改某一行记录时激活触发程序
delete:从表中删除某一行记录时激活触发程序
·触发器的触发时间有两种:
before表示在触发事件发生之前执行触发程序。
after表示在触发事件发生之后执行触发器。
因此,由触发器的时间和触发器的时间可以看出一个数据库表最多可以设置六种类型的触发器。
现将两张表建立好,一张student表、一张people表,在student表中增加一条李四的信息,通过触发器在people表中也增加了一条信息
//创建只有一个执行语句的触发器触发器,此时begin和end可以省略。
create trigger stu_in after insert
on student
for each row
insert into people (name,age) values ('李四',13);
insert的触发事件:
insert into student (stuname,stuage) values ('李四',23);//删除触发器,触发器只有一条执行语句
DROP TRIGGER stu_in ;
·触发程序中可以使用old关键字与new关键字:
当向表插入新记录时,在触发程序中可以使用new关键字表示新记录,当需要访问新记录的某个字段值时,可以使用“new.字段名”的方式访问。
当从表中删除某条旧记录时,在触发程序中可以使用old关键字表示旧记录,当需要访问旧记录的某个字段值时,可以使用“old.字段名”的方式访问。
当修改表的某条记录时,在触发程序中可以使用old关键字表示修改前的旧记录、使用new关键字表示修改后的新记录。当需要访问旧记录的某个字段值时,可以使用“old.字段名”的方式访问。当需要访问修改后的新记录的某个字段值时,可以使用“new.字段名”的方式访问。
1、使用new关键字
create trigger stu_in2 after insert
on student
for each row
insert into people (name,age) values (new.stuname,new.stuage);
insert的触发事件
insert into student (stuname,stuage) values ('李四',23);
//创建有多个执行语句的触发器。这时候多条语句要用begin end 包起来。组成语句块。
//在student表上建立insert触发器,当在student表中插入一条数据时,通过触发器在people表中插入一条数据,并将people表中id=1的信息删除掉。
delimiter &&
create trigger stu_in3 after insert
on student
for each row
begin
insert into people (name,age) values (new.stuname,new.stuage);
delete from people where id=1;
end
&&
delimiter ;
insert的触发事件
insert into student (stuname,stuage) values ('李四',23);
使用下面方法查看触发器的定义。
1、SHOW TRIGGERS;
2、查询information_schema数据库中的triggers表,可以查看触发器的定义
删除触发器
DROP TRIGGER stu_in3;