开发者社区> 问答> 正文

SQL删除级联帮助(特定问题)

我有两个表(出于说明目的重命名/重构),它们在HSQL数据库中具有多对多关系。当我从多对多关系的一侧删除时,我希望一切都消灭(无需查询表;这对性能至关重要)

这是我的主要表格:

CREATE TABLE PERSON ( PERSON_ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, NAME VARCHAR(50) )

CREATE TABLE JOB ( JOB_ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, NAME VARCHAR(50) ) 这是我的联接表:

CREATE TABLE JOB_PERSON ( PERSON_ID INTEGER, JOB_ID INTEGER ) 这是我的约束:

ALTER TABLE JOB_PERSON ADD CONSTRAINT FK_PERSON_JOB FOREIGN KEY(PERSON_ID) REFERENCES PERSON ON DELETE CASCADE ON UPDATE CASCADE

ALTER TABLE JOB_PERSON ADD CONSTRAINT FK_JOB_PERSON FOREIGN KEY(JOB_ID) REFERENCES JOB ON DELETE CASCADE ON UPDATE CASCADE 我基本上是想这样做:“从person_id = 0的人中删除”,如果JOB实体将被孤立,则将其从PERSON,JOB_PERSON和JOB中删除(不再在多对多表中引用)

是否可以在不查询数据库的情况下进行?当我删除时,它只会从PERSON和JOB_PERSON中删除。您可能会说,我的SQL技能不足。

这是我一直在玩的虚拟数据:

insert into person values(null,'Arthur'); insert into person values(null,'James'); insert into job values(null, 'Programmer') insert into job values(null, 'Manager') insert into job_person values(0,0); insert into job_person values(0,1); insert into job_person values(1,1); 因此,如果我输入这两个语句:

delete from person where person_id=0 delete from person where person_id=1 我想删除所有3个表中的所有内容。可能?

展开
收起
保持可爱mmm 2019-11-18 15:54:15 304 0
1 条回答
写回答
取消 提交回答
  • 创建一个存储过程,在其中传递ID,然后按照需要的顺序简单地删除适当的行。

    这样,您的应用就不受确切顺序的束缚,将来随着数据库的重新设计而改变。您还获得了额外的好处,即存储过程更快,然后发送了一堆查询。

    尽管如果您绝对希望在尝试删除该表时删除该表的方法,则必须使用触发器,但是触发器的规则是,请尽可能避免使用它们,如果存在其他解决方案,请使用它。因此,最终,使用存储过程是最好的解决方案。

    2019-11-18 15:54:26
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载