[英]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 -不能添加或更新子行,外键约束失败( pb
, report
,约束fk_report
外键( Doc_Id
)参考dumpinggrd
( Doc_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.