Erro na chave primaria me ajudem pf

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

Jonathan muito brigado

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