如何写“删除之前”#39;在SQL中触发

时间:2017-09-22 06:46:36

标签: mysql triggers

我目前正在做一个家庭作业项目,我们正在创建触发器用户plpgsql 我已设法找出更新/插入的触发器,但我在编写时遇到了麻烦 删除一个,感觉就像我在网上用文档圈了一圈。

我们给出的两个表是:

  

MAJOR(mCode,name)和主键mCode。

     

使用主键{sId}和外键mCode的STUDENT(sId,firstName,lastName,mCode,pointsEarned)

基本要求是,如果学生选择了专业,则不能删除或更改专业。 (我已经实现了更新/插入触发器)

我99%确定我的创建触发器只是:

CREATE TRIGGER major_delete 
BEFORE UPDATE OR INSERT ON student 
FOR EACH ROW EXECUTE PROCEDURE major_delete_trigger();

我已经为这个功能提出了两个基本的想法(基于讲座笔记):

CREATE OR REPLACE FUNCTION major_delete_trigger()
RETURNS trigger AS $$ 
DECLARE m RECORD;
BEGIN
SELECT * INTO m FROM major WHERE OLD.mcode = mcode;
IF NOT FOUND THEN RETURN OLD;
ELSE
DELETE FROM major WHERE mcode = OLD.mcode;
RETURN NULL; 
END IF;
END;
$$ LANGUAGE 'plpgsql';

什么都不做 - 在我的数据库上运行测试时删除应该失败仍然成功。

其次:

CREATE OR REPLACE FUNCTION major_delete_trigger()
RETURNS trigger AS $$ 
BEGIN
IF (TG_OP = 'DELETE') THEN
DELETE FROM major WHERE mcode=OLD.mcode;                                     
IF NOT FOUND THEN RETURN NULL; END IF;
END IF;
END;
$$ LANGUAGE 'plpgsql';

执行行' DELETE FROM major WHERE mcode = OLD.mcode;'直到堆栈上没有剩余空间。

在进行更新功能时,我发现我只是把它看作是非常复杂,所以我不确定这是否相同。 任何有用的想法或文档都将受到高度赞赏!

0 个答案:

没有答案