触发在MySQL中的同一个表中插入和更新多个记录

时间:2017-10-03 12:03:26

标签: mysql triggers

我有桌子

    CREATE TABLE `seniority_master` (
  `EMPNO` varchar(4) NOT NULL,
  `NAME` varchar(40) DEFAULT NULL,
  `GENDER` varchar(10) DEFAULT NULL,
  `CATGRY` varchar(10) DEFAULT NULL,
  `DOB` date DEFAULT NULL,
  `DESG` varchar(40) DEFAULT NULL,
  `DESGTYPE` varchar(100) DEFAULT NULL,
  `SENIORITY` int(4) NOT NULL,
  `EMPTYPE` varchar(45) DEFAULT NULL,
  `TYPE` varchar(45) DEFAULT NULL,
  `QUAL` varchar(200) DEFAULT NULL,
  `BRANCH` varchar(30) DEFAULT NULL,
  `DOJ` date DEFAULT NULL,
  `DOCA` date DEFAULT NULL,
  `PAYSCALE` varchar(45) DEFAULT NULL,
  `OTHERDESC` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`EMPNO`,`SENIORITY`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `seniority_master` VALUES ('1389','MUNNA','Male','OBC','1959-10-31','SENIOR RECORD SORTER (ASS-I)','',2,'STAFF','P03','4th','AGRA','1982-07-01','2007-07-01','12100-24500','');
INSERT INTO `seniority_master` VALUES ('1391','RAJENDER SINGH','MALE','UR','1965-07-09','AM (GENERAL)','GENERAL',40,'OFFICERS','H1','INTER  ','AGRA','1984-06-22','2013-09-05','16400-40500','');
INSERT INTO `seniority_master` VALUES ('1392','MADAN GOPAL','Male','OBC','1966-07-04','SENIOR OFFICE MANAGERS-I (GENERAL)','',6,'STAFF','L1','10TH','AGRA','1984-08-17','2015-04-17','15600-30500','');

在上述数据中,每次根据类型(P03,H1,L1)进行促销时,员工的资历(2,40,6)会发生变化员工

我们真正需要的是一个触发器,当其中一个员工被更新,插入或删除时,会触发类型的所有其他员工的资历

例如:假设 empno 4620具有资历 5和类型 A1,当我们删除特定的 empno 时seniority_master表,同一类型的以下员工的资历,将根据资历按递增或递减自动更新。更新和插入操作的类似过程。

我能够为我的程序要求创建AFTER INSERT和AFTER UPDATE触发器。

DELIMITER $$
CREATE TRIGGER after_seniority_insert 
    AFTER INSERT ON seniority_master
    FOR EACH ROW 
BEGIN
   INSERT INTO emp_positions
   ( empno,
     position,
     dop)
   VALUES
   ( NEW.empno,
     NEW.desg,
     NEW.doca );
END$$
DELIMITER ;

更新后:

DELIMITER $$
CREATE TRIGGER after_seniority_update 
    AFTER UPDATE ON seniority_master 
    FOR EACH ROW 
BEGIN
IF (old.desg != new.desg &&
          old.doca != new.doca) then
   INSERT INTO emp_positions
   ( empno,
     position,
     dop)
   VALUES
   ( NEW.empno,
     NEW.desg,
     NEW.doca );
END IF;
END$$
DELIMITER ;

帮我解决上面创建触发器的问题。

0 个答案:

没有答案