我正试着把数据插入数据库,但它一直说
Can't update table 'Donor' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
这是我的sql文件
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
--
-- Table Site
--
CREATE TABLE `Site`(
`sid` int(50) NOT NULL PRIMARY KEY,
`sname` varchar(50) NOT NULL,
`saddr` varchar(50) NOT NULL
);
--
-- Table Hospital
--
CREATE TABLE `Hospital` (
`hid` int(50) NOT NULL PRIMARY KEY,
`hname` varchar(50) NOT NULL,
`haddr` varchar(100) NOT NULL,
`hcontact` varchar(20) NOT NULL
);
--
-- Table Organization
--
CREATE TABLE `Organization` (
`oid` int(50) NOT NULL PRIMARY KEY,
`oname` varchar(50) NOT NULL,
`oaddr` varchar(100) NOT NULL,
`ocontact` varchar(20) NOT NULL
);
--
-- Table Donor
--
CREATE TABLE `Donor`(
`did` int(50) NOT NULL PRIMARY KEY,
`oid` int(50) NOT NULL,
`dname` varchar(50) NOT NULL,
`dblood` varchar(50) NOT NULL,
`dage` int(50) NOT NULL,
`dsex` char(10) NOT NULL,
`dmail` varchar(50) NOT NULL UNIQUE,
`dcount` int(40) NOT NULL,
CONSTRAINT FK_Organization FOREIGN KEY (`oid`) REFERENCES `Organization`(`oid`),
CONSTRAINT CHK_PersonAge CHECK (`dage`>=17 and `dage` < 80)
);
--
-- Table Volunteer : Is a weak entity
--
CREATE TABLE `Volunteer`(
`vid` int(50) NOT NULL,
`hid` int(50) NOT NULL,
`vname` varchar(50) NOT NULL,
PRIMARY KEY(`vid`, `hid`),
CONSTRAINT FK_Hospital FOREIGN KEY (`hid`) REFERENCES `Hospital`(`hid`)
);
--
-- Table Donation
--
CREATE TABLE `Donation`(
`did` int(50) NOT NULL,
`vid` int(50) NOT NULL,
`hid` int(50) NOT NULL,
`sid` int(50) NOT NULL,
`date` DATE NOT NULL, -- YYYY-MM-DD format
PRIMARY KEY(`did`, `date`),
CONSTRAINT FK_Donor FOREIGN KEY (`did`) REFERENCES `Donor`(`did`),
CONSTRAINT FK_VolunteerPresence FOREIGN KEY (`vid`,`hid`) REFERENCES `Volunteer`(`vid`,`hid`),
CONSTRAINT FK_Site FOREIGN KEY (`sid`) REFERENCES `Site`(`sid`)
);
-- Triggers
-- Make dcount 0 if anything else entered
DELIMITER $$
CREATE TRIGGER `Donation_Count`
AFTER INSERT
ON `Donor` FOR EACH ROW
BEGIN
UPDATE `Donor` SET `dcount` = 0 WHERE `did` = NEW.did;
END$$
DELIMITER ;
COMMIT;
对于第一个INSERT查询,它返回错误。查询的格式为
INSERT INTO Donor VALUES(1,1, 'Clint Barton', 'B+', 45, 'Male', 'hawkeye@gmail.com',0);
有没有人能解释一下为什么会这样。我检查了触发器的重复项,但没有。任何形式的帮助都将不胜感激。
发布于 2020-05-09 20:39:05
这个answer帮了我。然后,我使用相同的知识通过触发器修复了问题
DELIMITER $$
CREATE TRIGGER `Donation_Count`
BEFORE INSERT
ON `Donor` FOR EACH ROW
BEGIN
SET NEW.dcount = 0;
END$$
DELIMITER ;
https://stackoverflow.com/questions/61696740
复制相似问题