今天有空研究了一下触发器。废话少说,开始正题
关于触发器的名词解释:
1,trigger 触发器英文名称,表示在向数据库改变数据时自动触发的一段mysql数据库程序,这段程序就成为触发器,
2,new关键词:表示向数据库改变数据时添加或修改的新数据的引用关键词,如果不明白待会儿实例将会让你明白。
3,ole关键词:和new刚好相反。
4,事件以及对应需要用到的关键字
5,
insert 事件用 new
delete 事件用 old
update 事件用new 和old
6,查看触发器 show triggers status/G
7, 删除触发器:drop trigger 触发器名称
实例:功能--向客户表中插入一条数据时自动向客户登陆记录表中插入一条记录数据。
客户表sql:
drop table if exists customer;
mysql> create table customer(
-> id int primary key auto_increment,
-> name varchar(6),
-> password varchar(6))
-> charset=utf8;
客户登陆记录表sql;
CREATE TABLE `customerloginlog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`logindate` date DEFAULT NULL,
`username` varchar(6) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
创建触发器:当向客户表中插入一条记录时自动向客户登陆表中插入一条记录,该条记录记录登陆的
时间和客户的名称。
create trigger userloginlog
after INSERT on customer for each row
insert into customerloginlog(logindate,username) values(now(),new.name);/*注意new的用法
new的说明:
因为该出发器是用在向数据库中插入数据时出发的,所以相对于数据库表customer来说是新数据,所欲
要引用新记录中的字段name就要用new.name.
创建触发器:当向客户表中删除一条记录中就在用户注销表中插入一条记录,该条记录记录注销客户的时间和客户的名称。
create trigger userloginoutlog
after DELETE on customer for each row
insert into customerloginout(loginoutdate,username) values(now(),old.name);/*注意old的用法
old说明:
因为该触发器是发生在表中记录删除时出发的,所有相对于表来说,删除的数据就是就数据,所以要引用
删除的数据记录就需要old.name用法。
create trigger trigger1 BEFORE insert on customer for each row
begin
insert into customerloginlog(logindate,username) values(now(),new.name);
end