2013-04-21 222 views
-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和其他一些东西。任何帮助表示赞赏。

+1

那么当你通过删除一条记录来触发这个触发器时发生了什么 - 或者没有发生? – APC 2013-04-21 21:14:45

回答

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表中的所有子行会自动被删除也是如此。

相关问题