部门表CREATE TABLE `dept` (
  `Deptno` decimal(2,0) NOT NULL DEFAULT '0',
  `Deptname` varchar(10) DEFAULT NULL,
  `Manager` varchar(10) DEFAULT NULL,
  `PhoneNumber` char(12) DEFAULT NULL,
  PRIMARY KEY (`Deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
职工表CREATE TABLE `emp` (
  `Empno` decimal(4,0) DEFAULT NULL,
  `Ename` varchar(10) DEFAULT NULL,
  `Age` decimal(2,0) DEFAULT NULL,
  `Job` varchar(9) DEFAULT NULL,
  `Sal` decimal(7,2) DEFAULT NULL,
  `Deptno` decimal(2,0) DEFAULT NULL,
  KEY `Deptno` (`Deptno`),
  CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`Deptno`) REFERENCES `dept` (`Deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
部门表的某部门号发生变化时,相应部门的职工的部门号也要同时发生相同改变。
create TRIGGER B
after UPDATE on dept
for each row
BEGIN
set @Deptno1=old.Deptno;
set @Deptno2=new.Deptno;
update emp set deptno=@Deptno2 where Deptno=@Deptno1;
end;
这个是我写的触发器。但是deptno是外键,不允许我更新部门号。请问这个触发器应该怎么样写才能避免这个错误呢而且能实现我的需求呢。

解决方案 »

  1.   

    把你的EMP表的外键设置成CASCADE就成了。CREATE TABLE `emp` (
      `Empno` decimal(4,0) DEFAULT NULL,
      `Ename` varchar(10) DEFAULT NULL,
      `Age` decimal(2,0) DEFAULT NULL,
      `Job` varchar(9) DEFAULT NULL,
      `Sal` decimal(7,2) DEFAULT NULL,
      `Deptno` decimal(2,0) DEFAULT NULL,
      KEY `Deptno` (`Deptno`),
      CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`Deptno`) REFERENCES `dept` (`Deptno`) ON DELETE CASCADE ON UPDATE CASCADE 
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk;