《MySql觸發器》

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

 

注意:一、主動更新仍是被動更新 二、注意同步更新次序

相關文章
相關標籤/搜索