3

我用以下数据创建了两个表

在此处输入图像描述

脚本:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)ENGINE=InnoDB;

CREATE TABLE Orders
(
O_Id int,
OrderNo int,
P_Id int NOT NULL,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
ON DELETE CASCADE
ON UPDATE CASCADE
)ENGINE=InnoDB;

INSERT INTO Persons VALUES
(1, 'Last', 'First', 'Address', 'City');

INSERT INTO Orders VALUES
(1, 2, 1);

DELETE FROM Persons WHERE P_Id = 1
select * from Orders;

我已经在 MySQL 工作台中实现了这个示例(示例取自 w3schools)。

现在在删除persons 表中的第一行时,甚至Orders 表中的相应行也应该被删除。即最后一行。但它不会被删除。

有人可以告诉我我在这里缺少什么吗?

它仍然显示订单表中的行。

4

1 回答 1

3

如评论中所述,您应该打开foreign_key_checks

SET foreign_key_checks = 'ON'

如果设置为 1(默认值),则检查 InnoDB 表的外键约束。如果设置为 0,它们将被忽略。

请参阅文档

于 2013-02-23T23:20:36.863 回答