How to fix the error ? Error happens when I am trying to insert data into the course table

Asked

Viewed 40 times

-3

CREATE TABLE TIPO (
    CODIGO INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,    -- Código interno (PK)
    TIPO VARCHAR(32) NOT NULL,              -- Descrição
    PRIMARY KEY(CODIGO)                 -- Define o campo CODIGO como PK (Primary Key)
);

-- Cria a tabela INSTRUTOR

CREATE TABLE INSTRUTOR (
    CODIGO INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,    -- Código interno (PK)
    INSTRUTOR VARCHAR(64) NOT NULL,             -- Nome com até 64 caracteres
    TELEFONE VARCHAR(9) NULL,               -- Telefone, podendo ser nulo caso não tenha
    PRIMARY KEY(CODIGO)                 -- Define o campo CODIGO como PK (Primary Key)
);



-- Cria a tabela CURSO

CREATE TABLE CURSO (
    CODIGO INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,    -- Código interno (PK)
    CURSO VARCHAR(64) NOT NULL,             -- Título com até 64 caracteres
    TIPO INTEGER UNSIGNED NOT NULL,             -- Código do tipo de curso (idêntico a PK em CURSO)
    INSTRUTOR INTEGER UNSIGNED NOT NULL,            -- Código do instrutor (idêntico a PK em INSTRUTOR)
    VALOR DOUBLE NOT NULL,                  -- Valor do curso
    PRIMARY KEY(CODIGO),                    -- Define o campo CODIGO como PK (Primary Key)
    INDEX FK_TIPO(TIPO),                    -- Define o campo TIPO como um índice
    INDEX FK_INSTRUTOR(INSTRUTOR),              -- Define o campo INSTRUTOR como um índice
    FOREIGN KEY(TIPO) REFERENCES TIPO(CODIGO),      -- Cria o relacionamento (FK) com a tabela TIPO
    FOREIGN KEY(INSTRUTOR) REFERENCES INSTRUTOR(CODIGO) -- Cria o relacionamento (FK) com a tabela INSTRUTOR
);                              


-- Cria a tabela ALUNO

CREATE TABLE ALUNO (
    CODIGO INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,    -- Código interno (PK)
    ALUNO VARCHAR(64) NOT NULL,             -- Nome com até 64 caracteres
    ENDERECO VARCHAR(230) NOT NULL,             -- Endereço com até 230 caracteres
    EMAIL VARCHAR(128) NOT NULL,                -- E-mail com até 128 caracteres
    PRIMARY KEY(CODIGO)                 -- Define o campo CODIGO como PK (Primary Key)
);


-- Cria a tabela PEDIDO

CREATE TABLE PEDIDO (
    CODIGO INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,    -- Código interno (PK)
    ALUNO INTEGER UNSIGNED NOT NULL,            -- Código do aluno (idêntico a PK em ALUNO)
    DATAHORA DATETIME NOT NULL,             -- Armazena data e hora em uma única coluna
    PRIMARY KEY(CODIGO),                    -- Define o campo CODIGO como PK (Primary Key)
    INDEX FK_ALUNO(ALUNO),                  -- Define o campo ALUNO como um índice
    FOREIGN KEY(ALUNO) REFERENCES ALUNO(CODIGO)     -- Cria o relacionamento (FK) com a tabela ALUNO
);


-- Cria a tabela PEDIDO_DETALHE

CREATE TABLE PEDIDO_DETALHE (
    PEDIDO INTEGER UNSIGNED NOT NULL,           -- Código do pedido (idêntico a PK em PEDIDO)
    CURSO INTEGER UNSIGNED NOT NULL,            -- Código do curso (idêntico a PK em CURSO)
    VALOR DOUBLE NOT NULL,                  -- Valor do curso
    INDEX FK_PEDIDO(PEDIDO),                -- Define o campo ALUNO como um índice
    INDEX FK_CURSO(CURSO),                  -- Define o campo ALUNO como um índice
    PRIMARY KEY(PEDIDO, CURSO),             -- Define a chave primária composta
    FOREIGN KEY(PEDIDO) REFERENCES PEDIDO(CODIGO),      -- Cria o relacionamento (FK) com a tabela PEDIDO
    FOREIGN KEY(CURSO) REFERENCES CURSO(CODIGO)     -- Cria o relacionamento (FK) com a tabela CURSO
);

SELECT * FROM aluno;
ALTER TABLE aluno ADD DATA_NASCIMENTO varchar(10);
ALTER TABLE aluno CHANGE COLUMN DATA_NASCIMENTO NASCIMENTO DATE;

-- Crie um novo índice na tabela ALUNO, para o campo ALUNO;
 ALTER TABLE ALUNO  ADD INDEX INDEX_ALUNO(ALUNO);
 
 -- Inclua o campo EMAIL na tabela INSTRUTOR, com tamanho de 100 caracteres;
 ALTER TABLE  INSTRUTOR ADD EMAIL varchar(100);
 
 -- Crie um novo índice na tabela CURSO, para o campo INSTRUTOR;
 ALTER TABLE CURSO ADD INDEX INDEX_INSTRUTOR(INSTRUTOR);
 
 -- Remova o campo EMAIL da tabela INSTRUTOR;
 ALTER TABLE INSTRUTOR DROP EMAIL ;
 
 
 
 /*
 Crie comandos SQL para inserir os dados apresentados a seguir:
Tabela TIPO:
1, Banco de dados
2, Programação
3, Modelagem de dados*/

INSERT INTO Tipo (tipo)  VALUES ('Banco de dados');
INSERT INTO Tipo (tipo)  VALUES ('Programacao');
INSERT INTO Tipo (tipo)  VALUES ('Modelagem de dados');

INSERT INTO instrutor (instrutor, telefone) VALUES ('Andé Milani', '1111-1111');
INSERT INTO instrutor (instrutor, telefone) VALUES ('Carlos Tosin', '2222-2222');

INSERT INTO curso (codigo, curso, tipo , instrutor, valor) VALUES (1,'Java Fundamentos', 2, 2, 270);

Error Code: 1452. Cannot add or update a Child Row: a Foreign key Constraint fails (exercicio_softblue.curso, CONSTRAINT curso_ibfk_2 FOREIGN KEY (INSTRUTOR) REFERENCES instrutor (CODIGO)) //

  • What procedure did you follow to enter data in the table curso? Tried to solve the problem by entering a valid FK for the instructor table?

  • 1

    Probably the values you passed on VALUES (1,'Java Fundamentos', 2, 2, 270); (I refer to 2 and 270) are not the values of the Ids generated by the previous Inserts

  • I tried to perform the Insert without the data you mentioned, it error and ask for the same data.

1 answer

0

When you created the table COURSE, defined that the id_course would be a field AUTO_INCREMENT:

CREATE TABLE CURSO (
    CODIGO INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,    -- Código interno (PK)

When you are entering a new course, you are forcing a code for him:

INSERT INTO curso (codigo, curso, tipo , instrutor, valor) VALUES (1,'Java Fundamentos', 2, 2, 270);

The correct would be to enter the data and let the system with the AUTO_INCREMENT create the code automatically:

INSERT INTO curso (curso, tipo , instrutor, valor) VALUES ('Java Fundamentos', 2, 2, 270);

Look at the example of the instructor, you correctly entered the data without forcing the code :

INSERT INTO instrutor (instrutor, telefone) VALUES ('Carlos Tosin', '2222-2222');
  • Manage to solve the problem, thank you very much

Browser other questions tagged

You are not signed in. Login or sign up in order to post.