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
何が問題なのかを調べるための研究をしていますが、私は誰も賢明ではないと認めなければなりません。
誰かがこれを見て、私が間違っていることを教えてもらえますか?
感謝
とにかく制約名を指定する必要はありません。 MySQLは自動的に作成します。したがって、単純な 'alter table X foreign keyを追加... 'はうまく動作します。 –
それはそうですが、人間が判読可能で理解しやすい名前が優先されるかもしれません。 –
本当にありません。制約名は、削除または変更する場合にのみ関連し、 'show create table X'呼び出しから簡単に取得できます。 –