2016-11-13 65 views
0

我已經看到很多與我有同樣問題的話題,但沒有人對我的案例有很好的回答。SQL - phpmyadmin - 外鍵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