我很难回答的来自SQL考试的问题

时间:2019-06-16 18:21:47

标签: sql testing relational-database

我从关系数据库进行了一次考试。 我有一个问题(波兰语翻译),找不到任何线索可以回答: “存在外键时数据删除有哪些问题(三个)? 有哪些解决方案可用?” RD是我的致命弱点:(

2 个答案:

答案 0 :(得分:1)

有两种情况:

A)带有删除级联

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

解决方案:请勿使用ON DELETE CASCADE

B)没有ON DELETE级联

  1. 您要删除一行,但必须先手动删除其子级,然后再手动删除其子级,等等。
  2. 因此,要从表格中删除,您必须知道其所有子代和孙代,即整棵树。
  3. 不知道

解决方案:使用ON DELETE CASCADE或通过动态SQL删除(首先读取系统表,这样您便知道树,然后从下往上删除)。

答案 1 :(得分:0)

  

在存在外键的情况下删除数据有哪些问题(三个)?

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

1)TRUNCATE TABLE在存在FK的情况下不起作用(SQL Server)

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

3)如果不存在索引,删除操作可能会比较慢(在大表上检查引用完整性可能确实很慢)