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

SQLがテーブルを作成できません(errno:150)

    fullを参照する1つの外部キー制約を作成する必要があります 参照される各テーブルの主キーまたは一意キー。参照テーブルの主キーの中央にある個々の列に個別の外部キーを作成することはできません。

    CREATE TABLE prospect
    (Custname      VARCHAR(25) NOT NULL,
     Carmake       VARCHAR(25) NOT NULL,
     Carmodel      VARCHAR(20) NOT NULL,
     Caryear       VARCHAR(4) NOT NULL,
     Carextcolour  VARCHAR(10) NOT NULL,
     Cartrim       VARCHAR(10) NOT NULL,
     Optioncode    CHAR(4),
     CONSTRAINT pkprospect PRIMARY KEY (Custname, Carmake, Carmodel, Caryear, Carextcolour,           Cartrim, Optioncode),
     CONSTRAINT fkprospect FOREIGN KEY (Custname) REFERENCES customer(Custname),
     CONSTRAINT fk2prospect FOREIGN KEY (Carmake, Carmodel, Caryear, Carextcolour, Cartrim)
       REFERENCES car(Carmake, Carmodel, Caryear, Carextcolour, Cartrim),
     CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
    );
    

    shouldという言葉を使用しました 上記の理由は、外部キーに関しては、InnoDBは実際にはANSI /ISOSQL標準よりも少し寛容だからです。標準SQLによると、外部キーの列は必須 参照される主キーまたは一意キーの列の完全なリストになります。

    InnoDBでは、列の左プレフィックスである限り、列のサブセットを使用できます。ただし、子行が複数を参照する場合、非常に紛らわしい結果が得られるため、これを行うべきではありません。 親テーブルの行。



    1. レコードを時間ごとまたは日ごとにグループ化し、ギャップをゼロまたはヌルで埋めます

    2. SQLは単一グループグループ関数ではありません

    3. Oracleセッションで日付形式を変更する方法

    4. 既存の列にIDを追加する