首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法更新存储函数/触发器中的表‘trigger’,因为它已被调用此存储函数/触发器的语句使用

无法更新存储函数/触发器中的表‘trigger’,因为它已被调用此存储函数/触发器的语句使用
EN

Stack Overflow用户
提问于 2020-05-09 20:30:09
回答 1查看 27关注 0票数 0

我正试着把数据插入数据库,但它一直说

代码语言:javascript
运行
复制
Can't update table 'Donor' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

这是我的sql文件

代码语言:javascript
运行
复制
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查询,它返回错误。查询的格式为

代码语言:javascript
运行
复制
INSERT INTO Donor VALUES(1,1, 'Clint Barton', 'B+', 45, 'Male', 'hawkeye@gmail.com',0);

有没有人能解释一下为什么会这样。我检查了触发器的重复项,但没有。任何形式的帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-05-09 20:39:05

这个answer帮了我。然后,我使用相同的知识通过触发器修复了问题

代码语言:javascript
运行
复制
DELIMITER $$

CREATE TRIGGER `Donation_Count`
BEFORE INSERT
ON `Donor` FOR EACH ROW
BEGIN
  SET NEW.dcount = 0;
END$$

DELIMITER ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61696740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档