次のスクリプトを使用して、MySQLバージョン5.1でテーブルを作成します。このテーブルは、他の3つのテーブルを参照します。3つのテーブルはすべてInnoDBを使用して作成されており、3つのテーブルすべてにINTとして定義されたID列があります。
ACCOUNTとPERSONを参照する他のテーブルを正常に作成しましたが、これはADDRESSを参照する最初のテーブルであるため、実行時にそのテーブルの定義も以下に含めました。
私が得ているエラーは、errno150のERROR1005(HY000)です。これは、外部キーの作成に関連していると理解しています。
失敗するスクリプトは次のとおりです(簡単にするために余分な列は削除されています)。
CREATE TABLE WORK_ORDER (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ACCOUNT_ID INT NOT NULL,
CUSTOMER_ID INT NOT NULL,
SALES_ID INT,
TRADES_ID INT,
LOCATION_ID INT NOT NULL,
INDEX CUST_INDEX(CUSTOMER_ID),
INDEX SALES_INDEX(SALES_ID),
INDEX TRADES_INDEX(TRADES_ID),
INDEX ACCOUNT_INDEX(ACCOUNT_ID),
INDEX LOCATION_INDEX(LOCATION_ID),
FOREIGN KEY (CUSTOMER_ID) REFERENCES PERSON(ID) ON DELETE CASCADE,
FOREIGN KEY (SALES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
FOREIGN KEY (TRADES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
FOREIGN KEY (LOCATION_ID) REFERENCES ADDRESS(ID) ON DELETE SET NULL
) ENGINE=InnoDB;
ADDRESSテーブルの作成に使用されるSQLステートメントは以下のとおりです(簡単にするために余分な列は削除されています)。
CREATE TABLE ADDRESS (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
PERSON_ID INT NOT NULL,
ACCOUNT_ID INT NOT NULL,
ADDRESS_L1 VARCHAR(50),
ADDRESS_L2 VARCHAR(50),
CITY VARCHAR(25),
PROVINCE VARCHAR(20),
POSTAL_CODE VARCHAR(6),
COUNTRY VARCHAR(25),
INDEX CUST_INDEX(PERSON_ID),
INDEX ACCOUNT_INDEX(ACCOUNT_ID),
FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
FOREIGN KEY (PERSON_ID) REFERENCES PERSON(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
私はここで同様の問題を扱っているいくつかの質問を閲覧しましたが、ほとんどは重複した定義と一致しないフィールドタイプ、およびテーブルのいずれかにInnoDBを使用していないもののようです。ただし、これらのいずれも問題ではないようです。何か案は?