Queria cria a tabela a baixo mas sempre dar esse erro: Error Code: 1005. Can’t create table bd_campeonatos
.atleta
(errno: 150 “Foreign key constraint is incorrectly formed”)
CREATE TABLE atleta(
IDatleta int AUTO_INCREMENT NOT NULL PRIMARY KEY,
nome_atleta VARCHAR(50) NOT NULL,
cpf VARCHAR(14) NOT NULL,
dataNascimento DATE NOT NULL,
idade VARCHAR(3) NOT NULL,
sexo CHAR (1),
naturalidade VARCHAR(40),
ID_time INT,
FOREIGN KEY(ID_time)
REFERENCES times(IDtime)
);
Criou a tabela time antes de tentar criar a tabela atleta?
Vou mandar o código pronto:
CREATE TABLE atleta(
IDatleta int AUTO_INCREMENT NOT NULL PRIMARY KEY,
nome_atleta VARCHAR(50) NOT NULL,
cpf VARCHAR(14) NOT NULL,
dataNascimento DATE NOT NULL,
idade VARCHAR(3) NOT NULL,
sexo CHAR (1),
naturalidade VARCHAR(40),
ID_time INT,
FOREIGN KEY(ID_time)
REFERENCES times(IDtime)
);
CREATE TABLE time(
IDtime int AUTO_INCREMENT NOT NULL PRIMARY KEY,
nome_time VARCHAR(50) NOT NULL,
bairro VARCHAR(50) NOT NULL,
treinador VARCHAR(50) NOT NULL,
diretor VARCHAR(50) NOT NULL,
ID_atleta INT,
FOREIGN KEY(ID_atleta)
REFERENCES atleta(IDatleta),
ID_campeonato INT,
FOREIGN KEY(ID_campeonato)
REFERENCES campeonato(IDcampeonato)
);
CREATE TABLE campeonato(
IDcampeonato INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
nome_campeonato VARCHAR(50) NOT NULL,
premiacao VARCHAR(10) NOT NULL,
ID_time int,
FOREIGN KEY(ID_time)
REFERENCES times(IDtime)
);
Independente da ordem da o mesmo erro
Seu código está inconsistente, sua tabela time e campeonato tem uma referência circular!
Você nunca vai conseguir criar uma FK de uma tabela que ainda não exista!
Do jeito que você fez, para criar a tabela atleta ela depende de time, para criar a tabela time ela depende da tabela campeonato e da tabela atleta e para criar a tabela campeonato ela depende de time, ou seja você nunca vai conseguir criar nenhuma dessas tabelas da forma como estruturou a construção das mesmas.
1 curtida
Vc pode fazer a relação entre e Campeonato e Time usando uma tabela associativa (NxN), pois um campeonato pode ter vários times e um time pode participar de vários campeonatos. Isso vai evitar o problema solucionado pelo nosso colega @Jonathan_Medeiros.
1 curtida