誰かが私を助けてくれるかどうか疑問に思う。MySQL削除カスケード
「ユーザーの詳細」テーブルからユーザーを削除すると、自分のデータベース内の他のテーブルからレコードが削除されるように、「カスケード削除」mySQL機能を使用したいと考えています。
私はStackoverflowのいくつかの記事を読んだ後、私がインターネットで行った研究からテーブルをInnoDBに変更し、既存のテーブルを変更し始めました。
私は私の最初のテーブルに「DELETE CASCADE外部キー」を追加し、私は、他のテーブルに同じことをしようとすると、私は次のエラー受け取ることができました:
#1005 - Can't create table './db369054642/#sql-30d_bd1a57.frm' (errno: 121)
をしかし、なぜ私はこのエラーを受けているのか分かりません。なぜなら、最初に変更したテーブルが問題なく動作したからです。
親テーブルを1つの子テーブルにのみリンクすることはできますか?
親表(ユーザ詳細)
DROP TABLE IF EXISTS `userdetails`;
CREATE TABLE IF NOT EXISTS `userdetails` (
`userid` int(6) NOT NULL auto_increment,
`forename` varchar(20) NOT NULL,
`surname` varchar(30) NOT NULL,
`emailaddress` varchar(150) NOT NULL,
`password` varchar(200) NOT NULL,
`passwordhint` varchar(20) NOT NULL,
`subscriptionexpiration` date NOT NULL,
`salt` varchar(200) NOT NULL,
PRIMARY KEY (`userid`),
UNIQUE KEY `emailaddress` (`emailaddress`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
子テーブル(検出器)
DROP TABLE IF EXISTS `detectors`;
CREATE TABLE IF NOT EXISTS `detectors` (
`userid` int(6) NOT NULL,
`detectorid` int(6) NOT NULL auto_increment,
`detectorname` varchar(30) NOT NULL,
PRIMARY KEY (`detectorid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1 ;
カスケードSQLステートメント
ALTER TABLE detectors
add CONSTRAINT fk_userdetails
FOREIGN KEY (userid)
REFERENCES userdetails(userid)
ON DELETE CASCADE
などのフル表領域フル/ディスクなどの通常の容疑者は、私が思う、除外されていますか? –
スキーマとクエリを投稿してください –
Googleは常にエラーメッセージの最初の素晴らしいリソースです。私があなたのエラーを検索に差し込むと、私はこのフォーラムディスカッションを、他のいくつかのヒット - http://forums.mysql.com/read.php?22,33999,76181#msg-76181の中で取得します。問題のあるテーブル(ソースとターゲットの両方)に対して、 'SHOW CREATE TABLE * tableName *'を投稿してください。また、使用しようとしているSQLをソース表に変更してください。 – Perception