SQL - phpmyadmin - 外键错误:150

时间:2016-11-13 14:03:33

标签: mysql sql database phpmyadmin

我已经看过很多与我有同样问题的话题,但没有人对我的案例有好的答案。

我已经制作了一个模型,我从这个软件中获得了一个SQL脚本。 问题是我有错误: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 个答案:

答案 0 :(得分:2)

你想做什么:

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通常是具有此类列的表中的主键。我猜这个事件的名字实际上是独一无二的。日期可能也是如此,但至少需要一个索引。