4

これについて他のスレッドをたくさん読みましたが、まだ困惑しています。健全性チェックとして 2 つの非常に単純なテーブルを作成しましたが、カスケード削除を実行することができないため、この時点で助けが必要です。

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;
4

3 に答える 3

1

これは、私が使用していた MySQL のバージョン 5.5.28 のバグであることが判明しました。5.6.13 にアップグレードしたところ、すべてが機能するようになりました。助けてくれてありがとう。

于 2013-08-07T20:48:59.013 に答える
1

mysql の「外部キー チェック」が有効になっていることを確認します。

select @@FOREIGN_KEY_CHECKS;

set FOREIGN_KEY_CHECKS=1;
于 2014-09-01T18:29:08.827 に答える