2017-11-02 12 views
0

ここでエラーが発生している理由がわかりません。MySQLエラー#1005 errno 150

CURRENT TABLES:

ALTER TABLE `FYP`.`Disclosure` 
ADD CONSTRAINT `client` 
    FOREIGN KEY (`ClientID` , `Postcode` , `Age`) 
    REFERENCES `FYP`.`Clients` (`ClientID` , `Postcode` , `Age`) 
    ON DELETE NO ACTION 
    ON UPDATE CASCADE; 

外部キーを追加しようと

CREATE TABLE `Clients` (
    `ClientID` varchar(8) NOT NULL, 
    `Age` varchar(20) NOT NULL, 
    `Postcode` varchar(6) NOT NULL, 
    PRIMARY KEY (`ClientID`,`Age`,`Postcode`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `Disclosure` (
    `ClientID` varchar(8) NOT NULL, 
    `Fname` varchar(100) DEFAULT NULL, 
    `Lname` varchar(100) DEFAULT NULL, 
    `Email` varchar(100) DEFAULT NULL, 
    `Postcode` varchar(6) NOT NULL, 
    `Offender` varchar(45) DEFAULT NULL, 
    `Location` varchar(100) DEFAULT NULL, 
    `Age` varchar(20) NOT NULL, 
    `Support` varchar(45) DEFAULT NULL, 
    `Disclosure` varchar(1000) DEFAULT NULL, 
    PRIMARY KEY (`ClientID`,`Postcode`,`Age`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

私はエラーが何であるかを確認するには、show状態を使用してみましたが、私はまだそれを把握するカント。

SHOW ENGINE INNODB STATUS 

リターン:

------------------------ LATEST FOREIGN KEY ERROR ------ ------------------テーブルFYP /#のSQL-266_33bの外部キー制約で171102 11時35分10秒のエラー:

FOREIGN KEY(ClientIDPostcodeAge )参考文献 FYP。 UPDATE CASCADE ON DELETE NO ACTION ON ClientsClientIDPostcodeAge):参照される列が最初の列として表示され、参照 テーブルのインデックス、またはテーブル内の 列型と一致していない参照されたテーブルを見つけることができません 制約です。 > = InnoDB-4.1.12で作成されたテーブルでENUMとSET という内部ストレージタイプが変更され、新しいテーブルのカラムで 古いテーブルのカラムを参照できないことに注意してください。正しい外部キー定義については、 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html を参照してください。

答えて

0

参照する列にインデックスが必要です。索引の列の順序が重要です。クライアントテーブルで

(`ClientID`,`Postcode`,`Age`) 

に主キーを変更するこれはそれを

ALTER TABLE clients DROP PRIMARY KEY, ADD PRIMARY KEY (`ClientID`,`Postcode`,`Age`); 
+0

を行う必要があります)=この問題を修正ありがとう – Luke

関連する問題