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