我创建了两个包含以下数据的表
脚本:
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表中的相应行。即最后一行。但它没有被删除。
有人能告诉我这里缺少什么吗?
仍显示订单表中的行。
答案 0 :(得分:1)
如评论中所述,您应该启用foreign_key_checks
:
SET foreign_key_checks = 'ON'
如果设置为1(默认值),则检查InnoDB表的外键约束。如果设置为0,则忽略它们。