删除触发器之前删除另一个表中的条目

时间:2013-04-21 21:04:03

标签: sql plsql oracle11g triggers sql-delete

我正在为作业创建留言板系统,我在使用某些SQL时遇到了一些麻烦。使用Oracle 11g。

我有一个名为threads的表,当一个线程被删除时,我想删除与该线程相关的所有帖子,所以我想我会使用一个删除之前的触发器,但对SQL不是很熟悉。谁能帮我吗?

到目前为止我得到了什么:

CREATE OR REPLACE TRIGGER DELETE_POSTS
  BEFORE DELETE ON THREADS
  FOR EACH ROW
BEGIN  
  DELETE FROM POSTS
  WHERE POSTS.THREAD_ID = :OLD.ID
END;

我试过了:NEW和其他一些东西。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

除非您的作业特别需要触发器,否则使用执行级联删除的外键约束会更合乎逻辑。

SQL> create table threads(
  2    thread_id number primary key
  3  );

Table created.

SQL> create table posts(
  2    post_id number primary key,
  3    thread_id number references threads( thread_id ) on delete cascade
  4  );

Table created.

这样,当您从threads表中删除特定行时,posts表中的所有子行也将自动删除。