SQL 个考试中我觉得很难回答的问题

Question from SQL exam that I find hard to answer

我考了关系数据库。 我有一个问题(从波兰语翻译),我找不到任何线索来回答: “在存在外键的情况下数据删除的问题(其中三个)是什么? 有什么解决方案?” RD 是我的致命弱点:(

What are the problems (three of them) of data deletion in presence of foreign key?

我不会称它们为问题,但需要考虑的事项:

1) TRUNCATE TABLE 在 FK 存在时不起作用(SQL 服务器)

2) 您必须先从引用 table 中删除(如果没有定义 CASCADE 选项)

3) 如果索引不存在,删除可能会更慢(检查大型 table 上的引用完整性可能真的很慢)

有两种情况:

A) 使用 ON DELETE CASCADE

  1. 您只想删除一条记录,但这需要很长时间,因为它的整个树都被删除了。
  2. 你错误地删除了一行,哎呀,你的数据库的一半不见了。
  3. 您要删除一行。 DBMS 试图记住所有因此发生的删除(以便能够回滚操作)并在此过程中耗尽内存。

解决方法:不要使用ON DELETE CASCADE

B) 没有删除级联

  1. 你想删除一行,但必须先手动删除它的子行,然后再删除它们的子行,等等
  2. 所以,为了从 table 中删除,你必须知道它的所有子孙,即整棵树。
  3. 不知道

解决方案:要么使用ON DELETE CASCADE,要么通过动态删除SQL(先阅读系统tables,了解树,然后从下往上删除)。