-1

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

我有一个名为线程的表,当一个线程被删除时,我想删除与该线程相关的所有帖子,所以我想我会使用删除前触发器,但对 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 和其他一些东西。任何帮助表示赞赏。

4

1 回答 1

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也将自动被删除。

于 2013-04-21T21:33:29.810 回答