【问题标题】:using a trigger to delete all referenced all IDs referenced to an ID使用触发器删除所有引用的所有 ID 引用到一个 ID
【发布时间】:2014-10-05 01:02:26
【问题描述】:

请问各位...有没有办法在删除特定 ID 时删除数据库中引用特定 ID 的所有 ID?

例如,我有一个公司数据,其中包含部门列表,其下有员工,并且所有这些员工都有不同的记录,例如出勤、生物数据、薪资计划等

我设计我的数据库的方式是,一个部门下的员工使用外键引用该部门,同样,特定员工下的所有记录都使用外键引用该员工。

现在,是否可以有某种触发器或任何其他类型的机制,以便当我从员工表中删除员工时,引用该员工的所有其他记录也将被删除。

我会考虑使用多表删除,但由于我使用的是 java sqlite,它不支持我阅读的内容。而且我不想承受不得不从所有表中一个接一个地删除所有记录的压力。

非常感谢大家

【问题讨论】:

    标签: database sqlite triggers


    【解决方案1】:

    ON DELETE CASCADE 可以帮助你。看看documentation

    CASCADE:“CASCADE”操作将父键上的删除或更新操作传播到每个从属子键。对于“ON DELETE CASCADE”操作,这意味着与已删除父行关联的子表中的每一行也被删除

    你只需要引用父表的row id:

    CREATE TABLE parentTable(
      parent_id    INTEGER PRIMARY KEY, 
      data  TEXT
    );
    
    CREATE TABLE childTable(
      child_id     INTEGER,
      parent_id INTEGER REFERENCES parentTable(parent_id) ON DELETE CASCADE
    );
    

    我认为您还需要激活外键才能使其工作:

    PRAGMA foreign_keys = ON;
    

    【讨论】:

    • 所以你的意思是如果我要删除你在子表上方引用的父表也会去??
    • 表示当父表中的一行被删除时,子表中的所有相关行,其FOREIGN KEY指向已删除父表的行,都会被自动删除。所以,如果你删除了父表的全部内容,那么子表的内容也会被删除。
    • 当我想显示所有引用父 ID 的行时,这样的事情是否仍然适用。例如,我有一张员工表,我会喜欢在一张表中显示员工和其他表中的所有他/她的记录?
    • 如果您的问题已经解决,请不要忘记将答案标记为已接受。您可以单击答案旁边的复选标记将其从空心切换为绿色。
    猜你喜欢
    • 1970-01-01
    • 2019-11-07
    • 2019-02-15
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多