2016-03-28 27 views
1

Tablolarımda yabancı anahtarların kurulumunu yaptığımı, ancak DDL'mdeki doğru sözdizimine rağmen ve hatta bir kısıtlama eklemeye çalışırken bile, hiçbir şey olmuyor. Ben herhangi bir hata alamadım ve ben '10 satır (lar) etkilenen Kayıtlar belirten bir mesaj alıyorum: 10 çoğaltmaları: 0 Uyarılar:MySQL yabancı anahtarları oluşturulmuyor

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) 
); 

: 0'

İşte

benim tablo için tanımıdır Ben MySQL Workbench tablonun bakmak ve IntelliJ IDEA yoluyla, tüm gördüğüm adlı tek endeksidir FK_USERS_COURSES_COURSES (COURSE_ID)

istediğim gibi aşağıdaki komutları olarak defalarca çalıştırabilir ve apparnetly hiçbir şey olmaz:

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); 
Bu

enter image description here

nedeni ne olabilir: Ben IntelliJ benim Veritabanı sekmesinde gördüklerinizi İşte

mı? Silmeyi önlemek için yabancı tuşlara ihtiyacım var, ve şimdi bu gerçekleşmiyor.

+0

https://dev.mysql.com/doc/refman/5.7/en/using-innodb-tables .html Innodb motorunu kullandığınızdan emin olun (CREATE TABLE ... ENGINE = InnoDB). Aksi halde, yabancı anahtarlar sözdizimsel olarak kabul edilir, ancak uygulanmaz. – Mike

+0

@Mike Cevap buydu. Cevap vermek istiyorsan kabul edeceğim. – agent154

+0

Teşekkürler. Bitti. Sadece kontrol ettiğin zemini korumadığından emin olmak istedim (Ayrıca, eğer olmasaydı, hiçbir şeyim olmazdı!) – Mike

cevap

1

MySQL için InnoDB documentation'a bakın. MySQL, yabancı anahtar bildirimlerini geçerli sözdizimi olarak kabul ederken, şu anda yalnızca InnoDB motoru bunları uygular. Kurulumunuzda varsayılan değer değilse, tablo seçeneklerine ekleyin - TABLO OLUŞTUR ... MOTORU = InnoDB

İlgili konular