我已经看到了很多和我一样的话题,但没有人能很好地回答我的问题。
我建立了一个模型,并从这个软件中获得了一个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);发布于 2016-11-13 14:05:27
你想做的事:
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通常是具有此类列的表中的主键。我猜想这个事件的名称实际上是独一无二的。日期可能也一样,但至少需要一个索引。
https://stackoverflow.com/questions/40574666
复制相似问题