Navicat10 mysql 觸發器 應用案例mysql
首先創建tab1,tab2兩個表 當對tab1進行添加/修改/刪除時 自動添加/修改/刪除到tab2sql
請按照範例依次推廣應用設計
1、經常使用範例rem
創建 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;
創建 tab2date
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.idtab
在tab1的設計界面 添加觸發器vi
一、添加tab1 自動添加到tab2let
方法:t_afterinsert_on_tab1 觸發:After 選擇:插入
語句:insert into tab2(tb1_id,tab2_id) values(new.id,new.tab1_id)
二、更新tab1 的記錄 自動更新 tab2記錄
方法:t_afterupdate_on_tab1 觸發:After 選擇:更新
語句:update tab2 set tab2.tab2_id=new.tab1_id where tab2.tb1_id=old.id
三、刪除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;
2、觸發器條件語句更新
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末尾必須有";"
3、當前表自判斷條件自更新
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
注意:一、主動更新仍是被動更新 二、注意同步更新次序