2016-11-13 2 views
0

Я уже видел много тем, которые имеют такую ​​же проблему, как и я, но никто не имел хорошего ответа для моего дела.SQL - phpmyadmin - Foreign Key errno: 150

Я создал модель, и я получил SQL-скрипт из этого программного обеспечения. Проблема в том, что у меня есть errno: 150 с иностранным ключом в PhpMyAdmin. Я проверил, оба ключа имеют один и тот же тип, но проблема все еще здесь.

Можете ли вы помочь мне решить эту проблему, пожалуйста? я имел:

#1005 - Can't create table `candidathlon`.`#sql-21ac_3b` 
(errno: 150"Foreign key constraint is incorrectly formed") 

С просьбой:

ALTER TABLE participer_a 
    ADD CONSTRAINT FK_participer_a_DateEvenement FOREIGN KEY (DateEvenement) 
    REFERENCES Evenement(DateEvenement) 

Это мои таблицы, которые имеют эту проблему:

CREATE TABLE Evenement(
    NumEvenement int (11) Auto_increment NOT NULL , 
    NomEvenement Varchar (25) NOT NULL , 
    DateEvenement Date NOT NULL , 
    PRIMARY KEY (NumEvenement ,DateEvenement) , 
    INDEX (NomEvenement) 
)ENGINE=InnoDB; 

CREATE TABLE Candidat(
    DateNaissance  Date NOT NULL , 
    NumTelPort  Varchar (25) NOT NULL , 
    NumTelFixe  Varchar (25) NOT NULL , 
    Adresse   Varchar (25) NOT NULL , 
    TrouverEntreprise Bool NOT NULL , 
    InscritCFA  Bool NOT NULL , 
    NumPersonne  Int NOT NULL , 
    NumStatut   Int NOT NULL , 
    NumVille   Int NOT NULL , 
    DateApprenti  Date , 
    NumInstit   Int NOT NULL , 
    PRIMARY KEY (NumPersonne) , 
    INDEX (TrouverEntreprise ,InscritCFA) 
)ENGINE=InnoDB; 


CREATE TABLE participer_a(
    ParticipeEvent  Bool NOT NULL , 
    CommentaireEvent Varchar (100) , 
    SouhaiteParticiper Bool NOT NULL , 
    NumPersonne  Int NOT NULL , 
    NumEvenement  Int NOT NULL , 
    DateEvenement  Date NOT NULL , 
    PRIMARY KEY (NumPersonne ,NumEvenement ,DateEvenement) 
)ENGINE=InnoDB; 

ALTER TABLE participer_a ADD CONSTRAINT FK_participer_a_NumPersonne FOREIGN KEY (NumPersonne) REFERENCES Personne(NumPersonne); 
ALTER TABLE participer_a ADD CONSTRAINT FK_participer_a_NumEvenement FOREIGN KEY (NumEvenement) REFERENCES Evenement(NumEvenement); 
ALTER TABLE participer_a ADD CONSTRAINT FK_participer_a_DateEvenement FOREIGN KEY (DateEvenement) REFERENCES Evenement(DateEvenement); 

ответ

1

То, что вы хотите сделать:

ALTER TABLE participer_a 
    ADD CONSTRAINT FK_participer_a_DateEvenement 
     FOREIGN KEY (DateEvenement) REFERENCES Evenement(DateEvenement) 

Ключи, доступные на Таблица:

PRIMARY KEY (NumEvenement ,DateEvenement) , 
INDEX (NomEvenement) 

Ни один из этих запусков с DateEvenement, который необходим для ограничения внешнего ключа MySQL. Вам потребуется:

INDEX (DateEvenement) 

Я полагаю, что вы действительно хотите что-то вроде этого:

CREATE TABLE Evenement(
    NumEvenement int (11) Auto_increment NOT NULL , 
    NomEvenement Varchar (25) NOT NULL , 
    DateEvenement Date NOT NULL , 
    PRIMARY KEY (NumEvenement), 
    INDEX (DateEvenement) , 
    UNIQUE (NomEvenement) 
); 

NumEvenement является уникальным в каждом ряду. Обычно auto_increment является основным ключом в таблице с таким столбцом. Я предполагаю, что имя события действительно уникально. Датой может быть и дата, но, как минимум, вам нужен индекс.

+0

Aaaaah отлично. Да, это то, что я хотел сделать, но я не знал, как это сделать правильно. Я думал, что Индекс не проблема. Спасибо ! Все работает! – Etienne

Смежные вопросы