Navicat10 mysql 触发器 应用案例
首先建立tab1,tab2两个表 当对tab1进行添加/修改/删除时 自动添加/修改/删除到tab2
请按照范例依次推广应用
一、常用范例
建立 tab1
CREATE TABLE `tab1` (
`id` int(11) NOT NULL auto_increment,
`tab1_id` varchar(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
建立 tab2
CREATE TABLE `tab2` (
`id` int(11) NOT NULL auto_increment,
`tb1_id` int(11) default NULL,
`tab2_id` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这里tab2的tb1_id与tab1的id关联 即 tab2.tb1_id=tab1.id
在tab1的设计界面 添加触发器
1、添加tab1 自动添加到tab2
方法:t_afterinsert_on_tab1 触发:After 选择:插入
语句:insert into tab2(tb1_id,tab2_id) values(new.id,new.tab1_id)
2、更新tab1 的记录 自动更新 tab2记录
方法:t_afterupdate_on_tab1 触发:After 选择:更新
语句:update tab2 set tab2.tab2_id=new.tab1_id where tab2.tb1_id=old.id
3、删除tab1的某条记录tab2的对应记录也删除
方法:t_afterdelete_on_tab1 触发:After 选择:删除
语句:delete from tab2 where tab2.tb1_id=old.id
tab1 DDL信息:
CREATE TABLE `tab1` (
`id` int(11) NOT NULL auto_increment,
`tab1_id` varchar(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TRIGGER `t_afterinsert_on_tab1` AFTER INSERT ON `tab1` FOR EACH ROW insert into tab2(tb1_id,tab2_id) values(new.id,new.tab1_id);
CREATE TRIGGER `t_afterupdate_on_tab1` AFTER UPDATE ON `tab1` FOR EACH ROW update tab2 set tab2.tab2_id=new.tab1_id where tab2.tb1_id=old.id;
CREATE TRIGGER `t_afterdelete_on_tab1` AFTER DELETE ON `tab1` FOR EACH ROW delete from tab2 where tab2.tb1_id=old.id;
二、触发器条件语句更新
CREATE TABLE `tab1` (
`id` int(11) NOT NULL auto_increment,
`age` int(11) default NULL,
`dd` varchar(255) default NULL,
`tab1_id` varchar(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tab2` (
`id` int(11) NOT NULL auto_increment,
`tb1_id` int(11) default NULL,
`tab2_id` varchar(255) default NULL,
`dd` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
说明:对表tab1的age年龄判断 age>=10 表tab2 的dd=1 当age<10 表tab2的dd=0
方法:t_beforeupdate_on_tab1 触发 Before 选择:更新
语句:
IF(old.age>=10)THEN
update tab2 set tab2.tab2_id=new.tab1_id,tab2.dd='1' where tab2.tb1_id=old.id;
END IF
说明:执行语句2末尾必须有";"
三、当前表自判断条件自更新
tab111
CREATE TABLE `tab111` (
`id` int(11) NOT NULL auto_increment,
`age` int(11) default NULL,
`dd` varchar(255) default NULL,
`tab1_id` varchar(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
说明:当前tab111自判断当更新了age >=10 后 设置dd为1或0
方法:t_Beforeupdate_on_tab111 触发 Before 选择:更新
语句:
IF(new.age>=10)THEN
set new.dd = 1;
ELSE
set new.dd = 0;
END IF
注意:1、主动更新还是被动更新 2、注意同步更新次序