首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Foreign errno: 150

Foreign errno: 150
EN

Stack Overflow用户
提问于 2016-11-13 14:03:33
回答 1查看 115关注 0票数 0

我已经看到了很多和我一样的话题,但没有人能很好地回答我的问题。

我建立了一个模型,并从这个软件中获得了一个SQL脚本。问题是我在PhpMyAdmin中有一个带外键的errno: 150。我查过了,这两个键都有相同的类型,但问题仍然存在。

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

代码语言:javascript
复制
#1005 - Can't create table `candidathlon`.`#sql-21ac_3b` 
(errno: 150"Foreign key constraint is incorrectly formed")

在提出请求后:

代码语言:javascript
复制
ALTER TABLE participer_a 
  ADD CONSTRAINT FK_participer_a_DateEvenement FOREIGN KEY (DateEvenement) 
  REFERENCES Evenement(DateEvenement)

这是我的桌子有这个问题:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-13 14:05:27

你想做的事:

代码语言:javascript
复制
ALTER TABLE participer_a
    ADD CONSTRAINT FK_participer_a_DateEvenement
        FOREIGN KEY (DateEvenement) REFERENCES Evenement(DateEvenement)

桌子上可用的钥匙:

代码语言:javascript
复制
PRIMARY KEY (NumEvenement ,DateEvenement ) ,
INDEX (NomEvenement)

这两种方法都不是以DateEvenement开头的,因为MySQL外键约束需要它。你需要:

代码语言:javascript
复制
INDEX (DateEvenement)

我想你真正想要的是这样的东西:

代码语言:javascript
复制
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通常是具有此类列的表中的主键。我猜想这个事件的名称实际上是独一无二的。日期可能也一样,但至少需要一个索引。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40574666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档