mysql外键概念

时间:2010-10-10 06:15:31

标签: mysql

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?

2 个答案:

答案 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的行(它级联)。