0

プロジェクトでカスケードを使用して、特定のプロセスを簡素化したいと考えています。これら 2 つのクエリとさらにいくつかのクエリを作成しましたが、実行時にすべての子テーブルで同じエラーがスローされます。エンジンとして使用したときは機能しましたMyISAMが、さらにテストと調査を行った結果、カスケードをサポートしていないことが判明したため、InnoDBこれらのエラーをトリガーしたエンジンに切り替えました。同じ問題を抱えたいくつかのフォーラムとスレッドを見てきましたが、実際の問題がどこにあるのかわかりません。誰か助けてくれませんか?

親テーブル:

CREATE TABLE IF NOT EXISTS `branches` ( `branch_id` int(11) NOT NULL AUTO_INCREMENT, `key` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `short_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `city` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `timezone` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, UNIQUE(`key`), PRIMARY KEY (`branch_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

子テーブル:

CREATE TABLE IF NOT EXISTS `files` ( `file_id` int(11) NOT NULL AUTO_INCREMENT, `branch_id` int(11) NOT NULL, `path` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `use_google_analytics` BOOLEAN NOT NULL, FOREIGN KEY(`branch_id`) REFERENCES `branches`(`branch_id`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`file_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

エラー:

1005: Can't create table 'files' (errno: 150)
4

1 に答える 1

0

外部キーを定義しました

ON DELETE CASCADE 

しかし、あなたbranch_idは次のように定義されていNOT NULLます。それはうまくいきません。

branch_id絶対にならないことを望んでいますが、オプションnullで設定したい外部キー関連のデータが削除されます。NULLCASCADE

そのため、削除を変更するか、外部キーをON DELETE CASCADE許可します。NULLこれは機能します

SQLFiddle デモ

于 2013-06-20T12:59:26.460 に答える