CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
我不明白将ENGINE = INNODB放在这里的含义,为什么我们使用ON DELETE CASCADE?
答案 0 :(得分:3)
engine = innodb将确保您获得外键支持。默认的MyISAM引擎不支持外键。如果删除了父表中引用的行,则删除级联将删除子行。
答案 1 :(得分:1)
MySQL是数据库引擎。它可以使用多个存储引擎。 MyISAM是MySQL的默认存储引擎,它不支持外键。 InnoDB是另一个支持外键的存储引擎。您必须指定ENGINE = InnoDB,因为默认情况下MySQL将使用MyISAM。
ON DELETE CASCADE将删除表中具有引用已删除键的外键的所有行。我认为这是危险的,并且违背了外键限制的许多目的,所以我会避免使用它,但这只是我个人的意见。
说你有:
+-------+-------+
| ordID | proID |
+-------+-------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
+-------+-------+
在OrdersItems上,它有FOREIGN KEY(proID
)REFERENCES产品(proID
)ON DELETE CASCADE。
然后如果有人跑
DELETE FROM Products WHERE proID = 2
然后也会删除带有ordID 4和5的行(它级联)。