我正在尝试创建一个触发器,以便在插入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_Id
(dumpinggrd
)ON UPDATE CASCADE)“
我无法弄清楚出了什么问题。
答案 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 ;