2012-01-08 7 views
0

私は誰かが私を助けてくれるのだろうかと思います。複数のカスケードを削除する

私は、次の3つのテーブルがあります。

親表

CREATE TABLE `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 ; 

子表

CREATE TABLE `detectinglocations` (
    `userid` int(6) NOT NULL, 
    `locationid` int(6) NOT NULL auto_increment, 
    `locationname` varchar(80) NOT NULL, 
    `address` varchar(110) NOT NULL, 
    `osgb36lat` float(10,6) NOT NULL, 
    `osgb36lon` float(10,6) NOT NULL, 
    `osgridref` varchar(20) NOT NULL, 
    `wgs84latd` int(2) NOT NULL, 
    `wgs84latm` int(2) NOT NULL, 
    `wgs84lats` decimal(6,2) NOT NULL, 
    `wgs84latb` varchar(1) NOT NULL, 
    `wgs84lond` int(2) NOT NULL, 
    `wgs84lonm` int(2) NOT NULL, 
    `wgs84lons` decimal(6,2) NOT NULL, 
    `wgs84lonb` varchar(1) NOT NULL, 
    `nameoflocationcontact` varchar(30) NOT NULL, 
    `locationcontactsaddressline1` varchar(50) NOT NULL, 
    `locationcontactsaddressline2` varchar(50) default NULL, 
    `locationcontactsaddressline3` varchar(50) default NULL, 
    `locationcontactsaddressline4` varchar(50) default NULL, 
    `locationcontactstelephonenumber` varchar(15) default NULL, 
    PRIMARY KEY (`locationid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

子テーブル

CREATE TABLE `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 ; 

以下のコードを使用して、ユーザーが親テーブルから削除された場合、子テーブル内の関連する行が削除される「削除カスケード」機能を実装しようとしています。私はかなりAやった

#1005 - Can't create table './db369054642/#sql-30d_bd1a57.frm' (errno: 121) 

:私は成功した最初の子テーブルのためにこれを実装することができますが、私は第二子テーブルで同じことをしようとすると、私は次のエラーが表示され

ALTER TABLE 'tablename' 
    add CONSTRAINT fk_userdetails 
    FOREIGN KEY (userid) 
    REFERENCES userdetails(userid) 
    ON DELETE CASCADE 

何が問題なのかを調べるための研究をしていますが、私は誰も賢明ではないと認めなければなりません。

誰かがこれを見て、私が間違っていることを教えてもらえますか?

感謝

答えて

0

ソリューションは、2007年9月29日にマーク・ロビンスによってポストでhttp://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html 22:19上にあり、次の1:

  • 制約名は一意
  • fk_userdetailsでなければならないではありませんユニーク

だから、

を試してみてください

第2テーブル

+1

とにかく制約名を指定する必要はありません。 MySQLは自動的に作成します。したがって、単純な 'alter table X foreign keyを追加... 'はうまく動作します。 –

+0

それはそうですが、人間が判読可能で理解しやすい名前が優先されるかもしれません。 –

+0

本当にありません。制約名は、削除または変更する場合にのみ関連し、 'show create table X'呼び出しから簡単に取得できます。 –

関連する問題