外键约束不起作用

时间:2013-02-23 22:58:06

标签: mysql sql foreign-key-relationship

我创建了两个包含以下数据的表

enter image description here

脚本:

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)。

现在删除人员表中的第一行,甚至应该删除Orders表中的相应行。即最后一行。但它没有被删除。

有人能告诉我这里缺少什么吗?

仍显示订单表中的行。

1 个答案:

答案 0 :(得分:1)

如评论中所述,您应该启用foreign_key_checks

SET foreign_key_checks = 'ON'
  

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

See the documentation