2017-02-13 15 views
0

私はSQLを初めて使用しています。私は理解していますが、テーブルを作成できません。エラー1005は、テーブルuser.EMPLOYEEuser.STORE(エラー番号150)助けを作成することはできませんと言うエラー1005 cant create table user.EMPLOYEEとuser.STORE(errno 150)

DROP TABLE IF EXISTS EMPLOYEE, STORE, REGION; 

CREATE TABLE REGION (

    REGION_CODE int NOT NULL AUTO_INCREMENT, 
    REGION_DESCRIPT varchar(20), 
    PRIMARY KEY (REGION_CODE) 
)Engine=InnoDB; 

CREATE TABLE EMPLOYEE (

     EMP_CODE int NOT NULL AUTO_INCREMENT, 
     EMP_TITLE varchar(4), 
     EMP_LNAME varchar(15), 
     EMP_FNAME varchar(15), 
     EMP_INITIAL varchar(1), 
     EMP_DOB date, 
     STR_CODE int NOT NULL , 
     PRIMARY KEY (EMP_CODE,STR_CODE), 
     FOREIGN key (STR_CODE) REFERENCES STORE(STORE_CODE) 

) Engine=InnoDB; 


CREATE TABLE STORE (

     STORE_CODE int NOT NULL AUTO_INCREMENT, 
     STORE_NAME varchar(20), 
     STORE_YRD_SALES numeric, 
     REGION_CODE int, 
     EMP_CODE int NOT NULL, 
     PRIMARY KEY (STORE_CODE), 
     FOREIGN KEY (REGION_CODE) REFERENCES REGION(REGION_CODE), 
     FOREIGN KEY (EMP_CODE) REFERENCES EMPLOYEE(EMP_CODE) 
) Engine=InnoDB; 
+1

:これは(EMPLOYEE表作成に不足している制約に注意してください)のようなものになるだろう'store'テーブルは存在しませんが、' store'テーブルはまだ存在しません。 – Prisoner

+0

テーブルが相互にリンクし、それらが参照するテーブルの後に作成される可能性がある場合は、createステートメントを実行する前に外部キーチェックを無効にする必要があります。後で再び有効にすることを忘れないでください。 – gabe3886

答えて

0

エラー150は、それはあなたがテーブルを作成しているためだ場合は、おそらく実際にあなたによって引き起こされる、無効なキー制約であります現時点では存在しないstoreの制約をemployeeに追加することはできません。

storeを作成できないのは、employeeが作成されていないため、この問題の副作用に過ぎません。その問題を解決したら、storeの外部キーの制約は問題ありません。


最も簡単な解決策は、おそらくその後、一度storeが存在するそれを追加し、せずに制約をemployeeを作成することです。あなたが文を作成し、あなたが見ることができるよう、 `employee`テーブル参照のあなたの`外国key`を移動しようとするかもしれ

CREATE TABLE EMPLOYEE (
    EMP_CODE  int   NOT NULL AUTO_INCREMENT, 
    EMP_TITLE  varchar(4), 
    EMP_LNAME  varchar(15), 
    EMP_FNAME  varchar(15), 
    EMP_INITIAL varchar(1), 
    EMP_DOB  date, 
    STR_CODE  int   NOT NULL, 
    PRIMARY KEY (EMP_CODE,STR_CODE) 
); 

CREATE TABLE STORE (<<no change here>>); 

ALTER TABLE EMPLOYEE ADD CONSTRAINT EMP2STORE 
    FOREIGN KEY (STR_CODE) REFERENCES STORE(STORE_CODE); 
+0

従業員を参照する外部キーなしでSTOREを作成します。 EMPLOYEEを作成します。 ストアに外部キーを追加します。 – user2260040

+0

@ user2260040、それは私が提案する方法(外来キーのない従業員の作成、店舗の作成、従業員への外来キーの追加)とは根本的に異なっていますか?どちらも双方向制約で動作しますが、私の場合、既存のcreate文の順序を変更する必要はありません(ごくわずかです).-) – paxdiablo

関連する問題