mysql外键概念

mysql外键概念,mysql,Mysql,我不明白把ENGINE=INNODB放在这里的意思,为什么我们要在DELETE CASCADE上使用它?MySQL是数据库引擎。它可以使用多个存储引擎。MyISAM是MySQL的默认存储引擎,不支持外键。InnoDB是另一个支持外键的存储引擎。您必须指定ENGINE=InnoDB,因为默认情况下MySQL将使用MyISAM ON DELETE CASCADE将删除表中具有引用已删除键的外键的所有行。我认为它是危险的,并且违背了外键限制的许多目的,所以我会避免使用它,但这只是我个人的观点 假设你有

我不明白把ENGINE=INNODB放在这里的意思,为什么我们要在DELETE CASCADE上使用它?

MySQL是数据库引擎。它可以使用多个存储引擎。MyISAM是MySQL的默认存储引擎,不支持外键。InnoDB是另一个支持外键的存储引擎。您必须指定ENGINE=InnoDB,因为默认情况下MySQL将使用MyISAM

ON DELETE CASCADE将删除表中具有引用已删除键的外键的所有行。我认为它是危险的,并且违背了外键限制的许多目的,所以我会避免使用它,但这只是我个人的观点

假设你有:

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;
在OrdersItems上,它在删除级联上有外键(
proID
)引用产品(
proID

如果有人跑了

+-------+-------+
| ordID | proID |
+-------+-------+
|     1 |     1 | 
|     2 |     1 | 
|     3 |     1 | 
|     4 |     2 | 
|     5 |     2 | 
+-------+-------+

然后,ORID为4和5的行也将被删除(它级联)。

engine=innodb将确保您获得外键支持。默认的MyISAM引擎不支持外键。如果父表中的引用行被删除,则On delete cascade将删除子行。

我将两者都不使用。然而,你是否想使用它们完全取决于你自己。我建议在做出决定之前,在MySQL API中充分阅读它们:
DELETE FROM Products WHERE proID = 2