我正在为作业创建留言板系统,我在使用某些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和其他一些东西。任何帮助表示赞赏。
答案 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
表中的所有子行也将自动删除。