2016-03-28 15 views
1

私のテーブルに外部キーが設定されていると思っていましたが、DDLに正しい構文があっても、事実の後に制約を追加しようとしても何も起こりません。私はすべてのエラーを取得しない、と私は'10行を示すメッセージ(s)は影響を受けたレコードを取得:10の重複:0警告:ここでは0'MySQLの外部キーが作成されていない

が私のテーブルの定義です:

CREATE TABLE USERS_COURSES (
    USERS_COURSES_ID INT NOT NULL AUTO_INCREMENT, 
    USER_ID   INT NOT NULL, 
    COURSE_ID  INT NOT NULL, 
    ROLE    INT NOT NULL, 
    CONSTRAINT PK_USERS_COURSES PRIMARY KEY (USERS_COURSES_ID), 
    CONSTRAINT U_USERS_COURSES UNIQUE (USER_ID, COURSE_ID), 
    CONSTRAINT FK_USERS_COURSES_USERS FOREIGN KEY (USER_ID) REFERENCES USERS (USER_ID), 
    CONSTRAINT FK_USERS_COURSES_COURSES FOREIGN KEY (COURSE_ID) REFERENCES COURSES (COURSE_ID) 
); 

私は、MySQL Workbenchで、テーブルを見て、とのIntelliJ IDEAを経て、私が見るすべてが単一のインデックスはFK_USERS_COURSES_COURSES (COURSE_ID)

と呼ばれる私が好きなように私は何回で次のコマンドを実行することができ、かつapparnetly何も起こりません:

ALTER TABLE USERS_COURSES ADD CONSTRAINT FK_USERS_COURSES_USERS FOREIGN KEY (USER_ID) REFERENCES USERS (USER_ID); 
ALTER TABLE USERS_COURSES ADD CONSTRAINT FK_USERS_COURSES_COURSES FOREIGN KEY (COURSE_ID) REFERENCES COURSES (COURSE_ID); 
をここでは3210

は、私はIntelliJの中に私の[データベース]タブに表示するものである。

enter image description here

これを引き起こしている可能性がありますか?私は削除を防ぐために外部キーが必要です、そして、今これは起こっていません。

+0

https://dev.mysql.com/doc/refman/5.7/en/using-innodb-tables .html innodbエンジン(CREATE TABLE ... ENGINE = InnoDB)を使用していることを確認してください。それ以外の場合、外部キーは構文的に受け入れられますが、実装されません。 – Mike

+0

@Mikeそれは答えでした。あなたが答えをしたいなら、私はそれを受け入れるでしょう。 – agent154

+0

ありがとうございます。完了しました。ちょうど私があなたがすでにチェックしていた地面をカバーしていないことを確認したいと思っていた(それ以外の場合、私は何も持っていなかっただろう!) – Mike

答えて

1

MySQLの場合はInnoDB documentationをご覧ください。 MySQLは外部キー宣言を有効な構文として受け入れますが、現時点ではInnoDBエンジンだけが実際にそれらを実装しています。設定のデフォルトでない場合は、テーブルオプション - CREATE TABLE ... ENGINE = InnoDBに含めます。

関連する問題