触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
1,创建一张用户表,插入测试数据
CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment COMMENT '用户ID', `name` varchar(50) NOT NULL default '' COMMENT '名称', `sex` int(1) NOT NULL default '0' COMMENT '0为男,1为女', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; INSERT INTO `user` (`id`, `name`, `sex`) VALUES (1, '老王', 0), (2, '小猪', 0);
2,创建评论表,插入测试数据
CREATE TABLE `comment` ( `id` int(11) NOT NULL auto_increment COMMENT '评论ID', `u_id` int(11) NOT NULL COMMENT '用户ID', `name` varchar(50) NOT NULL default '' COMMENT '用户名称', `content` varchar(1000) NOT NULL default '' COMMENT '评论内容', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; INSERT INTO `comment` (`id`, `u_id`, `name`, `content`) VALUES (1, 1, '小猪', '触发器测试'), (2, 1, '小猪', '解决字段冗余'), (3, 2, '老王', '使代码更简单');
3,创建更新name的触发器
create trigger updatename after update on user for each row //建立触发器, begin if new.name!=old.name then //old,new都是代表当前操作的记录行,你把它当成表名当表中用户名称发生变化时,执行
update comment set comment.name=new.name where comment.u_id=old.id;
end if;
end;
updatename:触发器的名称 after:触发的时机 user:所建触发器的表
4,测试触发器
update user set name='张三' where id = 1;
查看表的触发器
SHOW TRIGGERS;
删除触发器
drop trigger deletecomment;