2016-06-17 21 views
0

私は、MySQLがテーブル内に複数の外部キーを持つことをサポートしていることを知っています。 Error Code: 1215. Cannot add foreign key constraint複数の外部キーを持つテーブルのSQLクエリ?

CREATE TABLE IF NOT EXISTS ActivelyCore.Locations (
    idLocation INTEGER NOT NULL AUTO_INCREMENT, 
    CONSTRAINT idLocation_Uniq UNIQUE (idLocation), 
    CONSTRAINT idLocation_Pk PRIMARY KEY (idLocation), 
    idOrganization INTEGER NOT NULL, 
    INDEX (idOrganization), 
    CONSTRAINT Locations_Fk_idOrganization FOREIGN KEY (idOrganization) 
     REFERENCES ActivelyCore.Organizations (idOrganization), 
    idAddress INTEGER NOT NULL, 
    INDEX (idAddress), 
    CONSTRAINT Locations_Fk_idAddress FOREIGN KEY (idAddress) 
     REFERENCES ActivelyCore.Address (idAddress), 
    name   VARCHAR(250) NOT NULL, 
    telephone  VARCHAR(15), 
    email   VARCHAR(200), 
    website  VARCHAR(200), 
    hours   VARCHAR(1000), 
    tags   VARCHAR(1000) 
); 

クエリに間違っているかもしれないもの上の任意のアイデアを:エラーが生じている。この表作成の問題に実行していますか?

+0

参照されるテーブルは存在していますか? –

+2

http://stackoverflow.com/questions/17691282/error-code-1215-cannot-add-foreign-key-constraint-foreign-keys – blur0224

+0

まず、列定義レベルで制約とインデックスを追加することは非常に悪い習慣です。読むのはとても難しいです。第2に、制約が参照するテーブルが既に存在していなければなりません。したがって、複数の表をアルファベット順に作成する場合、ActivelyCore.Organizations表はまだ存在しません。このような理由から、すべてのテーブルを作成してスクリプトの最後に制約を追加することをお勧めします。これに対する例外は主キーの追加です。 –

答えて

0

最初に参照先のテーブルを作成し、主キーを使用して主キーを作成することができます。

CREATE TABLE ActivelyCore.Organizations (
idOrganization INTEGER PRIMARY KEY 
...) 
CREATE TABLE ActivelyCore.Adress(
idAdress INTEGER PRIMARY KEY 
...) 

その後、

CREATE TABLE IF NOT EXISTS ActivelyCore.Locations (
     idLocation INTEGER NOT NULL AUTO_INCREMENT, 
     idAddress INTEGER NOT NULL, 
     idOrganization INTEGER NOT NULL, 
     name   VARCHAR(250) NOT NULL 
     telephone  VARCHAR(15), 
     email   VARCHAR(200), 
     website  VARCHAR(200), 
     hours   VARCHAR(1000), 
     tags   VARCHAR(1000), 
     CONSTRAINT idLocation_Pk PRIMARY KEY (idLocation), 
     INDEX (idOrganization), 
     CONSTRAINT Locations_Fk_idOrganization FOREIGN KEY (idOrganization) 
      REFERENCES ActivelyCore.Organizations (idOrganization), 
     INDEX (idAddress), 
     CONSTRAINT Locations_Fk_idAddress FOREIGN KEY (idAddress) 
      REFERENCES ActivelyCore.Address (idAddress) 
    ); 
関連する問題