簡體   English   中英

MySQL外鍵級聯刪除不起作用,完全陷入困境

[英]MySQL foreign key cascade delete not working, completely stumped

我已經讀過很多其他主題,但是我仍然很困惑。 我已經創建了兩個非常簡單的表來進行完整性檢查,並且無法讓它們執行級聯刪除,因此在這一點上需要一些幫助。

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中的一個錯誤。 我剛剛升級到5.6.13,現在一切正常。 謝謝您的幫助。

確保啟用了mysql“外鍵檢查”:

select @@FOREIGN_KEY_CHECKS;

set FOREIGN_KEY_CHECKS=1;

我發現,調用PDO::exec('SET FOREIGN_KEY_CHECKS=1')對於PDO而言必須遵循ON DELETEON UPDATE動作。 由於某些原因,默認情況下,我的系統上禁用外鍵約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM