插入前触发,插入后触发

时间:2014-03-09 03:48:28

标签: sql database triggers phpmyadmin

我正在尝试创建一个触发器,以便在插入DUMPINGGRD之前在REPORT中插入新行。有用。问题是DUMPINGGRD中创建的第一个File_Id为'0',当我尝试在REPORT中插入另一行时,显然它正在尝试再次将File_Id创建为'0'。

CREATE TABLE REPORT ( R_Id int(10) NOT NULL AUTO_INCREMENT,
R_Type varchar(255) not null,
R_Title varchar(255) not null,
U_Id int(10) not null,
File_Id int(10) not null,  
PRIMARY KEY (R_Id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 CREATE TABLE `DUMPINGGRD`
(
`File_Id` int(10) NOT NULL,
`File_Name` varchar(255),
`UploadDate` date,
 PRIMARY KEY (`File_Id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE  `REPORT` ADD CONSTRAINT  `fk_report` FOREIGN KEY (`File_Id`)
REFERENCES `DUMPINGGRD` (`File_Id`) ON UPDATE CASCADE; 

delimiter $$
CREATE TRIGGER ins_File 
BEFORE INSERT ON `REPORT` 
FOR EACH ROW
BEGIN
INSERT INTO `DUMPINGGRD` (`File_Id`) VALUES (NEW.`File_Id`);
END$$
delimiter ;

谢谢!

当我尝试在REPORT中插入新行时,我只是输入错误#1452 - 无法添加或更新子行:外键约束失败(pb。{{1} },CONSTRAINT report FOREIGN KEY(fk_report)REFERENCES Doc_Iddumpinggrd)ON UPDATE CASCADE)“

我无法弄清楚出了什么问题。

1 个答案:

答案 0 :(得分:0)

试试这个:

   delimiter $$ CREATE TRIGGER ins_File BEFORE INSERT ON REPORT FOR EACH ROW BEGIN 
set @filenum=(Select max(File_Id) from DUMPINGGRD);  

if(@filenum=0) then  --checking whether record is present or not
begin
new.File_Id=1;--if no record is present then set file_id=1 
end;
else
new.File_Id=@filenum+1;--if record is present then set file_id=Maxvalue+1;
end if; 
    INSERT INTO DUMPINGGRD (File_Id) VALUES (NEW.File_Id);
     END$$ delimiter ;