2016-12-08 30 views
2

私はここにこのエラーに関する多数の質問があることを知っていますが、私は多くを検索し、誰もそれを説明していないようです! 私は次のコード使用してテーブルを作成しました:MySQL - エラー1215、外部キー制約を追加できません

CREATE TABLE Venue (
    venueID VARCHAR(20), 
    venueEmail VARCHAR(30) NOT NULL, 
    address VARCHAR(100), 
    phoneNo VARCHAR(20), 
    managerNo VARCHAR(20), 
    capacity INT(4), 
    PRIMARY KEY (venueEmail) 
)ENGINE=InnoDB; 

をこのコードを使用して第1のテーブルを参照する外部キーを持つテーブルを作成しようとしています:

CREATE TABLE Concert (
    referenceNo VARCHAR(6), 
    venueEmail VARCHAR(30), 
    eventDate VARCHAR(10), 
    startTime VARCHAR(5), 
    ticketsSold INT(4), 
    PRIMARY KEY (referenceNo), 
    FOREIGN KEY (venueEmail) REFERENCES Venue ON UPDATE CASCADE ON DELETE CASCADE 
)ENGINE=InnoDB; 

しかし、それは与えています1215エラーメッセージ!

+1

*「The 1215 error message」*というよりも、質問にメッセージを含める必要があります。また、 'REFERENCES Venue(venueEmail)'のように列を指定する必要はありませんか? – Santi

+0

'Venue'テーブルの' venueEmail'カラムを参照する必要はありませんか? –

答えて

4

構文これは正しくありません。

問題の解決ここに:

CREATE TABLE Venue (
    venueID VARCHAR(20), 
    venueEmail VARCHAR(30) NOT NULL, 
    address VARCHAR(100), 
    phoneNo VARCHAR(20), 
    managerNo VARCHAR(20), 
    capacity INT(4), 
    PRIMARY KEY (venueEmail) 
)ENGINE=InnoDB; 

CREATE TABLE Concert (
    referenceNo VARCaHAR(6), 
    venueEmail VARCHAR(30), 
    eventDate VARCHAR(10), 
    startTime VARCHAR(5), 
    ticketsSold INT(4), 
    PRIMARY KEY (referenceNo), 
    FOREIGN KEY (venueEmail) REFERENCES Venue(`venueEmail`) ON UPDATE CASCADE ON DELETE CASCADE 
)ENGINE=InnoDB; 

注:

列が参照されてはtable_name(column_name)のように記載すべき。

あなたはcolumn_name一部を逃しました。


REFERENCE


より:これはMySQLの特異性である

FWIW:

@Bill Karwinはコメント欄に次の有益な情報を追加しました。標準のSQLでは、 参照された列名を省略すると、デフォルトでは外部の キー列と同じ名前になります。しかし、InnoDBはこのショートカット構文をサポートしていません。どちらの場合でも カラムを指定する必要があります。

+1

+1 FWIWこれはMySQLの特質です。標準SQLでは、参照される列名を省略すると、デフォルトで外部キー列と同じ名前になります。しかし、InnoDBはこのショートカット構文をサポートしていないので、どちらの場合でもカラムを指定する必要があります。 –

+0

素晴らしい!これは素晴らしい追加です。私はこの標準のSQLルールについて知らなかった。ありがとう@BillKarwin – 1000111

+0

@ 1000111は大括弧の中に一重引用符を必要としませんでしたが、これは修正されました。ありがとう!! – pxdr0

関連する問題