MySQL外键级联删除不起作用,完全难倒

MySQL外键级联删除不起作用,完全难倒,mysql,foreign-keys,constraints,cascade,Mysql,Foreign Keys,Constraints,Cascade,我已经读了很多关于这方面的文章,但我仍然感到困惑。我已经创建了两个非常简单的表作为健全性检查,无法让它们执行级联删除,因此需要一些帮助 CREATE TABLE `test1` ( `test1_ID` int(11) NOT NULL AUTO_INCREMENT, `test1_name` char(15) DEFAULT NULL, PRIMARY KEY (`test1_ID`), UNIQUE KEY `test1_ID_UNIQUE` (`test1_ID`) ) E

我已经读了很多关于这方面的文章,但我仍然感到困惑。我已经创建了两个非常简单的表作为健全性检查,无法让它们执行级联删除,因此需要一些帮助

CREATE TABLE `test1` (
  `test1_ID` int(11) NOT NULL AUTO_INCREMENT,
  `test1_name` char(15) DEFAULT NULL,
  PRIMARY KEY (`test1_ID`),
  UNIQUE KEY `test1_ID_UNIQUE` (`test1_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `test2` (
  `test2_ID` int(11) NOT NULL AUTO_INCREMENT,
  `test2_FK_test1` int(11) NOT NULL,
  `test2_name` char(15) DEFAULT NULL,
  PRIMARY KEY (`test2_ID`),
  UNIQUE KEY `test2_ID_UNIQUE` (`test2_ID`),
  KEY `IDX_test2_FK_test1` (`test2_FK_test1`),
  CONSTRAINT `FK_test2__test1` FOREIGN KEY (`test2_FK_test1`) REFERENCES `test1` (`test1_ID`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
用于测试的表数据

Test 1 Table Data:
+----------+------------+
| test1_ID | test1_name |
+----------+------------+
|        1 | test1 r1   |
|        2 | test1 r2   |
+----------+------------+

Test 2 Table Data:
+----------+----------------+----------------+
| test2_ID | test2_FK_test1 | test2_name     |
+----------+----------------+----------------+
|        1 |              1 | Test2 R1 - FK1 |
|        2 |              1 | Test2 R2 - FK1 |
|        3 |              1 | Test2 R3 - FK1 |
+----------+----------------+----------------+

Insert statements:
INSERT INTO `test1` VALUES (1,'test1 r2'),(2,'test1 r2');
INSERT INTO `test2` VALUES (1,1,'Test2 R1 - FK1'),(2,1,'Test2 R2 - FK1'),(3,1,'Test2 R3 - FK1');
如果我从test1表中删除第一行,test2表数据将不会发生任何变化

DELETE FROM test1 WHERE test1_ID = 1;

这是我使用的MySQL版本5.5.28中的一个bug。我刚升级到5.6.13,现在一切正常。感谢您的帮助。

确保启用了mysql“外键检查”:

select @@FOREIGN_KEY_CHECKS;

set FOREIGN_KEY_CHECKS=1;

我发现调用
PDO::exec('SET-FOREIGN\u-KEY\u-CHECKS=1')
对于PDO在删除时遵守
和更新时遵守
操作是必要的。由于某些原因,在我的系统上默认情况下禁用外键约束。

。(离题:您的
UNIQUE
约束是多余的,主键已经是唯一的约束)我刚刚完全按照上面的方法测试了您的SQL,它工作得很好。从test1中删除该行时,三行从test2中删除。这可能是我运行的MySQL版本5.5.28中的一个错误,我将对其进行更新,看看会发生什么。让人有点不安的是,准备发布MySQL的过程没有发现此类问题。