《MySql触发器》

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、注意同步更新次序

 

你可能感兴趣的:(触发器,mysql)