MySQL error 1824 - Failed to open the referenced table
06/08/2021
0
acredito que tenha mais erros no código além desse...
drop database victor_hugo_barbosa_da_silva;
create database victor_hugo_barbosa_da_silva;
use victor_hugo_barbosa_da_silva;
create table departamento(
dep_id int not null,
dep_nome varchar(45),
fk_docente_id int,
primary key (dep_id),
foreign key(fk_docente_id) references docente (docente_id)
);
create table docente(
doc_id int not null,
doc_nome varchar(45),
fk_dep_id int not null,
primary key (doc_id),
foreign key (fk_dep_id) references departamento (dep_id)
);
create table curso(
cur_id int not null,
cur_nome varchar(45),
fk_dep_id int,
primary key (cur_id),
foreign key (fk_dep_id) references departamento (dep_id)
);
create table discente (
disc_ra int not null,
disc_nome varchar(45),
fk_curso_id int,
primary key (disc_ra),
foreign key (fk_curso_id) references curso (curso_id),
dis_email varchar(30)
);
create table atribuicao(
primary key (pk_fk_disciplina_cod),
primary key (pk_fk_docente_id)
);
create table disciplina(
disc_cod int not null,
disc_nome varchar(45),
fk_curso_id int,
primary key (disc_cod),
foreign key (fk_curso_id) references curso (curso_id)
);
create table matricula(
primary key (pk_fk_discente_ra),
primary key (pk_fk_disciplina_cod)
);
Victor Hugo
Post mais votado
06/08/2021
Em que momento da o erro?
Uma sugestão, vai rodando um pedaço do código de cada vez.
Lembrando que o SQL, o que determina que "um comando" terminou são os ";" (ponto e vírgula)
Então mesmo que vc pegue um comando CREATETABLE, se tentar executar uma linha vai dar erro, vc tem que pegar o comando do "CREATE TABLE", até o ";".
Execute dessa forma, bloco por bloco, e veja onde vai parar.
Espero ter conseguido te dar uma luz.
Grande abs
Luiz Santos
Mais Posts
06/08/2021
Victor Hugo
Em que momento da o erro?
Uma sugestão, vai rodando um pedaço do código de cada vez.
Lembrando que o SQL, o que determina que "um comando" terminou são os ";" (ponto e vírgula)
Então mesmo que vc pegue um comando CREATETABLE, se tentar executar uma linha vai dar erro, vc tem que pegar o comando do "CREATE TABLE", até o ";".
Execute dessa forma, bloco por bloco, e veja onde vai parar.
Espero ter conseguido te dar uma luz.
Grande abs
Então, quando eu tento executar a partir do ";" ali do fim da tabela departamento ele me da esse erro, e quando tento qualquer uma das outras tabelas ele também apresenta este erro. Eu dei uma mudada no código, mas ainda continua os erros.
DROP DATABASE VICTOR_HUGO_BARBOSA_DA_SILVA;
CREATE DATABASE VICTOR_HUGO_BARBOSA_DA_SILVA;
USE VICTOR_HUGO_BARBOSA_DA_SILVA;
CREATE TABLE DEPARTAMENTO(
DEP_ID INT NOT NULL,
DEP_NOME VARCHAR(45),
FK_DOC_ID INT,
PRIMARY KEY (DEP_ID),
FOREIGN KEY(FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);
CREATE TABLE DOCENTE(
DOC_ID INT NOT NULL,
DOC_NOME VARCHAR(45),
FK_DEP_ID INT NOT NULL,
PRIMARY KEY (DOC_ID),
FOREIGN KEY (FK_DEP_ID) REFERENCES DEPARTAMENTO (DEP_ID)
);
CREATE TABLE CURSO(
CUR_ID INT NOT NULL,
CUR_NOME VARCHAR(45),
FK_DEP_ID INT NOT NULL,
PRIMARY KEY (CUR_ID),
FOREIGN KEY (FK_DEP_ID) REFERENCES DEPARTAMENTO (DEP_ID)
);
CREATE TABLE DISCENTE (
DISC_RA INT NOT NULL,
DISC_NOME VARCHAR(45),
FK_CURSO_ID INT NOT NULL,
PRIMARY KEY (DISC_RA),
FOREIGN KEY (FK_CURSO_ID) REFERENCES CURSO (CURSO_ID),
DIS_EMAIL VARCHAR(30)
);
CREATE TABLE ATRIBUICAO(
PK_FK_DISCIP_COD INT NOT NULL,
PK_FK_DOC_ID INT NOT NULL,
PRIMARY KEY (PK_FK_DISCIP_COD, PK_FK_DOC_ID),
FOREIGN KEY (PK_FK_DISCIP_COD) REFERENCES DISCIPLINA (DISCIP_ID),
FOREIGN KEY (PK_FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);
CREATE TABLE DISCIPLINA(
DISCIP_COD INT NOT NULL,
DISCIP_NOME VARCHAR(45),
FK_CUR_ID INT NOT NULL,
PRIMARY KEY (DISCIP_COD),
FOREIGN KEY (FK_CUR_ID) REFERENCES CURSO (CUR_ID)
);
CREATE TABLE MATRICULA(
PK_FK_DISC_RA INT NOT NULL,
PK_FK_DISCIP_COD INT NOT NULL,
PRIMARY KEY (PK_FK_DISC_RA, PK_FK_DISCIP_COD),
FOREIGN KEY (PK_FK_DISC_RA) REFERENCES DISCENTE (DISC_ID),
FOREIGN KEY (PK_FK_DISCIP_COD) REFERENCES DISCIPLINA (DISCIP_COD)
);
06/08/2021
Luiz Santos
Vamos por partes.
Fui analisar melhor seu código.
Dica 1, nunca crie as chaves estrangeiras (FOREIGN KEY) durante a criação das tabelas.
Pra você pode criar uma chave primária, vc precisa que as 2 tabelas estejam criadas, a tabela que "cede" a chave e a tabela que "recebe" a chave.
Seu primeiro comando é esse (descontando o "create database" e o "use":
CREATE TABLE DEPARTAMENTO(
DEP_ID INT NOT NULL,
DEP_NOME VARCHAR(45),
FK_DOC_ID INT,
PRIMARY KEY (DEP_ID),
FOREIGN KEY(FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);
Você não tem como colocar a chave estrangeira ai, porque a a tabela docente ainda não existe.
Mude o código, crie as chaves estrangeiras depois de ter criado todas as tabelas.
Só isso já vai te ajudar bastante.
06/08/2021
Victor Hugo
Vamos por partes.
Fui analisar melhor seu código.
Dica 1, nunca crie as chaves estrangeiras (FOREIGN KEY) durante a criação das tabelas.
Pra você pode criar uma chave primária, vc precisa que as 2 tabelas estejam criadas, a tabela que "cede" a chave e a tabela que "recebe" a chave.
Seu primeiro comando é esse (descontando o "create database" e o "use":
CREATE TABLE DEPARTAMENTO(
DEP_ID INT NOT NULL,
DEP_NOME VARCHAR(45),
FK_DOC_ID INT,
PRIMARY KEY (DEP_ID),
FOREIGN KEY(FK_DOC_ID) REFERENCES DOCENTE (DOC_ID)
);
Você não tem como colocar a chave estrangeira ai, porque a a tabela docente ainda não existe.
Mude o código, crie as chaves estrangeiras depois de ter criado todas as tabelas.
Só isso já vai te ajudar bastante.
Fiz isso, retirei as chaves estrangeiras, ai ele criou as tabelas. Porem, quando adiciono elas e executo, ele me diz que a tabela em questão já existe. Isso para qualquer uma das tabelas.
06/08/2021
Luiz Santos
Vc tem uma FK em docente que referencia departamento, e uma FK em departamento que referencia docente.
Você não pode fazer isso.
Tem que respeitar a cardinalidade.
Seria o que 1 docente em N departamentos ou 1 departamento com N docentes.
06/08/2021
Luiz Santos
Depois que a tabela já existe, vc tem que usar o comando ALTER
Assim:
alter table departamento add constraint fk_docente foreign key(fk_docente_id) references docente (docente_id)
Clique aqui para fazer login e interagir na Comunidade :)