【问题标题】:Before delete trigger to delete entries in another table在删除触发器之前删除另一个表中的条目
【发布时间】:2013-04-21 21:04:03
【问题描述】:

我正在为一项作业创建一个留言板系统,但我在处理一些 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 和其他一些东西。任何帮助表示赞赏。

【问题讨论】:

  • 那么,当您通过删除记录触发此触发器时会发生什么(或不会发生)?

标签: sql plsql oracle11g triggers sql-delete


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多