【问题标题】:SQL - phpmyadmin - Foreign Key errno: 150SQL - phpmyadmin - 外键错误:150
【发布时间】:2016-11-13 14:03:33
【问题描述】:

我已经看到许多与我有相同问题的主题,但没有人能很好地回答我的情况。

我已经制作了一个模型,并从这个软件中获得了一个 SQL 脚本。 问题是我在 PhpMyAdmin 中有 errno: 150 和外键。 我检查了,两个键的类型相同,但问题仍然存在。

你能帮我解决这个问题吗? 我有:

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

【问题讨论】:

    标签: mysql sql database phpmyadmin


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

    【讨论】:

    • 啊啊啊太棒了。是的,这就是我想做的,但我不知道如何正确地做到这一点。我认为索引不是问题。谢谢 !一切正常!
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2015-08-11
    相关资源
    最近更新 更多