sql >> データベース >  >> RDS >> Mysql

SQLエラー(1215):外部キー制約を追加できません

    照合が異なるため、以下は失敗します。なぜこれを表示するのですか? OPがしなかったからです。

    その照合を使用したvarchar255のサイズ設定でエラー1071が発生したため、サイズを縮小してから、自動選択された文字セットを使用したことに注意してください。

    重要なのは、照合が異なると機能しないということです。

    CREATE TABLE `user_details` (
        `ClientID` VARCHAR(100) NOT NULL,
        PRIMARY KEY (`ClientID`)
    )ENGINE=InnoDB;
    
    CREATE TABLE `profilePic` (
        `ClientID` VARCHAR(100) NOT NULL,
        PRIMARY KEY (`ClientID`),
        CONSTRAINT `FK__user_details` FOREIGN KEY (`ClientID`) REFERENCES `user_details` (`ClientID`) ON UPDATE CASCADE ON DELETE CASCADE
    )COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;
    

    上記の失敗はテーブルレベルです。列レベルの照合の不一致が原因で1215エラーを引き起こすトリッキーなものは、この回答 で確認できます。 。

    より一般的なケースに議論を引き上げる...

    テーブルの作成時に外部キー制約を確立しようとしているか、 ALTER TABLE

    など
    ALTER TABLE `facility` ADD CONSTRAINT `fkZipcode` 
         FOREIGN KEY (`zipcode`) REFERENCES `allzips`(`zipcode`);
    

    以下が適用されます。

    FOREIGNKEYの使用というタイトルのMySQLマニュアルページから制約

    さらに、参照 (親)テーブルには、高速ルックアップ(検証)に使用できる左端のキーが必要です。その親キーはPRIMARYである必要はありません またはUNIQUE 。この概念は、以下の2番目のチャンクで説明されています。最初のチャンクはヘルパーをほのめかしています 参照で必要に応じて作成されるインデックス (子)必要に応じてテーブル。



    1. PLS-00428:このSELECTステートメントでINTO句が必要です

    2. postgresqlで作成された新しいテーブルの権限をユーザーに付与します

    3. ajax関数とphpで行を削除します

    4. SQLServerでのトランザクションROLLBACKの使用