mysql 触发器

触发器(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;

posted @ 2018-08-16 13:31  小猪哥哥  阅读(157)  评论(0编辑  收藏  举报