繁体   English   中英

插入前触发,插入后触发

[英]Trigger before insert and trigger after insertion

我正在尝试创建一个触发器,以在DUMPINGGRD插入新行, DUMPINGGRD再插入REPORT 有用。 问题是创建的第一个FILE_ID DUMPINGGRD为“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 -不能添加或更新子行,外键约束失败( pbreport ,约束fk_report外键( Doc_Id )参考dumpinggrdDoc_Id )ON更新级联)”

我只是不知道怎么了。

尝试这个:

   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 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM