sql 是如何实现级联的?
how is cascading implemented in sql?
我有一个带主键的 tableA,它充当 tableB 的外键。
如果从 tableA 中删除了行,sql 如何从 tableB 中删除行,假设 ON DELETE CASCADE
已打开。
SQL 是否对 tableB 执行全面 table 扫描?
如果外部列被索引怎么办?
DB 将对 B 执行完整的 table 扫描,除非不需要,因为该列已被索引。这就是为什么您应该始终将 FK 编入索引。
编辑:我从@BillKarwin 的评论中看到,MySQL 将不允许您在没有索引目标列的情况下拥有 FK。 Oracle,我的专业领域,将允许它,并将如上所述对外部进行全面扫描 table 寻找要删除的行,这当然非常慢。
我有一个带主键的 tableA,它充当 tableB 的外键。
如果从 tableA 中删除了行,sql 如何从 tableB 中删除行,假设 ON DELETE CASCADE
已打开。
SQL 是否对 tableB 执行全面 table 扫描? 如果外部列被索引怎么办?
DB 将对 B 执行完整的 table 扫描,除非不需要,因为该列已被索引。这就是为什么您应该始终将 FK 编入索引。
编辑:我从@BillKarwin 的评论中看到,MySQL 将不允许您在没有索引目标列的情况下拥有 FK。 Oracle,我的专业领域,将允许它,并将如上所述对外部进行全面扫描 table 寻找要删除的行,这当然非常慢。