Erro ao criar tabela no MySQL Workbench

Boa noite pessoal.

Estou tendo problemas na criação de tabelas, se alguém conseguir ajudar. Aliás, esqueci de mencionar o que exatamente acontece quando executo o script recebo a seguinte mensagem:

Preparing…
Importing Livraria.sql…
Finished executing script
ERROR 1824 (HY000) at line 35: Failed to open the referenced table 'Livros’
Operation failed with exitcode 1

        DROP DATABASE IF EXISTS Livraria;
        
        CREATE DATABASE Livraria;

        USE Livraria;

        CREATE TABLE Autores
        (
           AutorID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
           Nome VARCHAR(255) NOT NULL
        );

        /*CREATE TABLE Livros
        (
           LivroID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
           Titulo VARCHAR(255) NOT NULL,
           Resumo VARCHAR(255),
           AutorID INTEGER NOT NULL;
           FOREIGN KEY (AutorID) REFERENCES Autores(AutorID),
           Edicao VARCHAR(255),
           ISBN VARCHAR(255) NOT NULL,
           Estado CHAR(1),
           Quantidade INTEGER
        );*/

        CREATE TABLE Alunos
        (
           AlunoID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
           Nome VARCHAR(255) NOT NULL,
           NumeroRA INTEGER NOT NULL,
           Curso VARCHAR(255),
           Estado CHAR(1)
        );

        CREATE TABLE Emprestimos
        (
           Numero INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
           DataEmissao DATE NOT NULL,
           DataDevolucao DATE NOT NULL,
           DataValidade DATE NOT NULL,
           AlunoID INTEGER NOT NULL,
           LivroID INTEGER NOT NULL,
           FOREIGN KEY (AlunoID) REFERENCES Alunos(AlunoID),
           FOREIGN KEY (LivroID) REFERENCES Livros(LivroID),
           Estado CHAR(1) NOT NULL
        );

        INSERT INTO Autores (Nome) VALUES ('Nivio Ziviani');
        INSERT INTO Autores (Nome) VALUES ('Victorine Viviane Mizrahi');
        INSERT INTO Autores (Nome) VALUES ('Everton Coimbra de Araujo');
        INSERT INTO Autores (Nome) VALUES ('Thomas Cormen');
        INSERT INTO Autores (Nome) VALUES ('Nell Dale');

        INSERT INTO Livros (Titulo, Resumo, Edicao,ISBN, Estado, Quantidade)
        VALUES('Projeto de Algoritmos em C', 'Algoritmos e estruturas de dados
               em C.','Primeira', '9788576050451', 'A', 1,
               'Treinamento em Linguagem C', 'Introdução a linguagem C e conceitos.',
              'Segunda','9788576050452','A',1,
              'Lógica de Programção', 'Abordagem de tratamentos de pensamento geral.',
              'Terceira', '9788576050453', 'A', 1,
              'Algoritmos', 'Ensino de algoritmos com ilustrações e exercícios.',
              'Quarta', '9788576050454', 'A', 1,
              'Ciência da Computação', 'Histórico e abordagem da computação.',
              'Quinta', '9788576050452', 'A', 1);

        INSERT INTO Alunos (Nome, NumeroRA, Curso, Estado)
        VALUES ('Thomas', 1501506, 'Ciencia da Computacao', 'A',
                'Jeff', 1511607, 'Engenharia Ambiental', 'A',
                'Joshua', 1521708, 'Engenharia Alimentos', 'A',
                'Anna', 1531809, 'Engenharia Eletrica', 'A',
                'Beth', 1541910, 'Engenharia Software', 'A');

        INSERT INTO Emprestimos (DataEmissao, DataDevolucao, DataValidade, Estado)
        VALUES ('10-june-2017', '17-june-2017', '17-june-2017', 'E',
                '11-june-2017','18-june-2017', '18-june-2017', 'E',
                '12-june-2017', '19-june-2017', '19-june-2017', 'E',
                '13-june-2017', '20-june-2017', '20-june-2017', 'E',
                '14-june-2017', '21-june-2017', '21-june-2017', 'E');

        CREATE TABLE Livros
        (
           ISBN VARCHAR(13) NOT NULL PRIMARY KEY,
           Titulo VARCHAR(255) NOT NULL,
           Edicao INTEGER NOT NULL,
           Copyright VARCHAR(4) NOT NULL
        );

        CREATE TABLE AutorISBN
        (
           AutorID INTEGER NOT NULL,
           ISBN VARCHAR(13) NOT NULL,
           FOREIGN KEY (AutorID) REFERENCES Autores(AutorID),
           FOREIGN KEY (ISBN) REFERENCES Livros(ISBN)
        );

        INSERT INTO Livros (ISBN,Titulo,Edicao,Copyright) VALUES ('0132152134','Projeto de Algoritmos em C',2,'2004');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (1,'0132152134');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (2,'0132152134');

        INSERT INTO Livros (ISBN,Titulo,Edicao,Copyright) VALUES ('0132151421','Introdução a linguagem Pascal',3,'2006');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (1,'0132151421');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (2,'0132151421');

        INSERT INTO Livros (ISBN,Titulo,Edicao,Copyright) VALUES ('0132575663','Java como programar',4,'2008');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (1,'0132575663');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (2,'0132575663');

        INSERT INTO Livros (ISBN,Titulo,Edicao,Copyright) VALUES ('0132662361','Treinamento em linguagem C',5,'2010');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (1,'0132662361');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (2,'0132662361');

        INSERT INTO Livros (ISBN,Titulo,Edicao,Copyright) VALUES ('0132404168','Lógica de Programação',6,'2011');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (1,'0132404168');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (2,'0132404168');

        INSERT INTO Livros (ISBN,Titulo,Edicao,Copyright) VALUES ('013705842X','Algoritmos',3,'2012');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (1,'013705842X');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (2,'013705842X');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (3,'013705842X');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (4,'013705842X');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (5,'013705842X');

        INSERT INTO Livros (ISBN,Titulo,Edicao,Copyright) VALUES ('0132121360','Introdução a Ciência da Computação',8,'2013');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (1,'0132121360');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (2,'0132121360');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (3,'0132121360');
        INSERT INTO AutorISBN (AutorID,ISBN) VALUES (4,'0132121360');

Na tabela livros você pôs um “;” no lugar de “,”

Corrigi a linha que esta com erro, mas quando executei o script novamente continua dando erro:

Preparing…
Importing Livraria.sql…
Finished executing script
ERROR 1136 (21S01) at line 54: Column count doesn’t match value count at row 1
Operation failed with exitcode 1

Qual é a linha 54 do seu arquivo ?

Acredito que esta fazendo referência a esta tabela:

INSERT INTO Livros (Titulo, Resumo, Edicao,ISBN, Estado, Quantidade)

Não entendi o porque do erro os valores que estou inserindo estão conforme a inserção:

VALUES('Projeto de Algoritmos em C', 'Algoritmos e estruturas de dados
       em C.','Primeira', '9788576050451', 'A', 1,
       'Treinamento em Linguagem C', 'Introdução a linguagem C e conceitos.',
      'Segunda','9788576050452','A',1,
      'Lógica de Programção', 'Abordagem de tratamentos de pensamento geral.',
      'Terceira', '9788576050453', 'A', 1,
      'Algoritmos', 'Ensino de algoritmos com ilustrações e exercícios.',
      'Quarta', '9788576050454', 'A', 1,
      'Ciência da Computação', 'Histórico e abordagem da computação.',
      'Quinta', '9788576050452', 'A', 1);

Separa os inserts para executar individualmente, no lugar de passar vários values faça vários inserts, assim ficar mais facil de visualizar e localizar os possíveis erros.

Acredito que seja isto que você mencionou:

INSERT INTO Livros (Titulo)
VALUES('Projeto de Algoritmos em C');
INSERT INTO Livros (Resumo)
VALUES('Algoritmos e estruturas de dados em C.');
INSERT INTO Livros (Edicao)
VALUES('Primeira');
INSERT INTO Livros (ISBN)
VALUES('9788576050451');
INSERT INTO Livros (Estado)
VALUES('A');
INSERT INTO Livros (Quantidade)
VALUES(1);

Saída do script:

Preparing…
Importing Livraria.sql…
Finished executing script
ERROR 1364 (HY000) at line 54: Field ‘AutorID’ doesn’t have a default value
Operation failed with exitcode 1

Se entendi ele esta fazendo referência a tabela de Livros qual tem o AutorID, mas minha dúvida é se na inserção eu tenho que colocar o AutorID, porque na tabela de Livros já estou fazendo referência a tabela de Autores com o código do autor.

CREATE TABLE Livros
(
   LivroID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Titulo VARCHAR(255) NOT NULL,
   Resumo VARCHAR(255),
   AutorID INTEGER NOT NULL,
   FOREIGN KEY (AutorID) REFERENCES Autores(AutorID),
   Edicao VARCHAR(255),
   ISBN VARCHAR(255) NOT NULL,
   Estado CHAR(1),
   Quantidade INTEGER
);

Haushaushauhs não assim jovem!

Seria algo mais ou menos assim:

INSERT INTO LIVROS(Titulo, Resumo, AutorID, Edicao, ISBN, Estado, Quantidade) VALUES('Tutilo 1', 'Resumo 1', 1, 'Edicao 1', '1234567890', 'A', 1);
    INSERT INTO LIVROS(Titulo, Resumo, AutorID, Edicao, ISBN, Estado, Quantidade) VALUES('Tutilo 2', 'Resumo 2', 2, 'Edicao 2', '1234567890', 'A', 1);
    INSERT INTO LIVROS(Titulo, Resumo, AutorID, Edicao, ISBN, Estado, Quantidade) VALUES('Tutilo 3', 'Resumo 3', 1, 'Edicao 3', '1234567890', 'A', 1);

Pegou a ideia?
Faça os inserts separadamente, da forma como mostrei.

Peguei a idéia sim, vacilei porque faz tempo que não pego no SQL e também fazia um tempo que não vinha aqui no fórum, fiz como você mostrou e corrigiu, agora esta dando outro erro:

Preparing…
Importing Livraria.sql…
Finished executing script
ERROR 1292 (22007) at line 73: Incorrect date value: ‘01-10-2019’ for column ‘DataEmissao’ at row 1
Operation failed with exitcode 1

INSERT INTO Emprestimos (DataEmissao, DataDevolucao, DataValidade, Estado) VALUES ('01-10-2019', '02-15-2019', '03-20-2019', 'E');
INSERT INTO Emprestimos (DataEmissao, DataDevolucao, DataValidade, Estado) VALUES ('01-11-2019','02-16-2019', '03-21-2019', 'E');
INSERT INTO Emprestimos (DataEmissao, DataDevolucao, DataValidade, Estado) VALUES ('01-12-2019', '02-17-2019', '03-22-2019', 'E');
INSERT INTO Emprestimos (DataEmissao, DataDevolucao, DataValidade, Estado) VALUES ('01-13-2019', '02-18-2019', '03-23-2019', 'E');
INSERT INTO Emprestimos (DataEmissao, DataDevolucao, DataValidade, Estado) VALUES ('01-14-2019', '02-19-2019', '03-24-2019', 'E');   

Pelo que me lembro a data o formato é no padrão americano ‘m-d-y’.

Na verdade é o inverso: yyyy-mm-dd

Sim verdade resolveu. Jonathan me diz uma coisa executei o script de novo e apareceu esta mensagem:

Preparing…
Importing Livraria.sql…
Finished executing script
ERROR 1364 (HY000) at line 73: Field ‘LivroID’ doesn’t have a default value
Operation failed with exitcode 1

Mas não estou entendendo porque ele diz que o campo ‘LivroID’ não tem um valor padrão sendo que coloquei na tabela de Emprestimos a referência para a tabela Livros e Alunos:

CREATE TABLE Emprestimos
(
   Numero INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
   DataEmissao DATE NOT NULL,
   DataDevolucao DATE NOT NULL,
   DataValidade DATE NOT NULL,
   AlunoID INTEGER NOT NULL,
   LivroID INTEGER NOT NULL,
   FOREIGN KEY (AlunoID) REFERENCES Alunos(AlunoID),
   FOREIGN KEY (LivroID) REFERENCES Livros(LivroID),
   Estado CHAR(1) NOT NULL
);

Até aqui beleza adicionei no insert como você disse mas deu outro erro com as foreign key:

ERROR 1452 (23000) at line 76: Cannot add or update a child row: a foreign key constraint fails (Livraria.Emprestimos, CONSTRAINT Emprestimos_ibfk_2 FOREIGN KEY (LivroID) REFERENCES Livros (livroid)).

Quebra de integridade, provavelmente você está tentando usar um ID de livro que não existe na sua tabela de livros.

Verifique se o ID que está referênciando existe.

1 curtida

Verdade encontrei estava na tabela de Empréstimos.

Preparing…
Importing Livraria.sql…
Finished executing script
Operation completed successfully

Obrigado cara por tirar minhas dúvidas e ter paciência, vou tentar utilizar mais o fórum para não ficar com tanta dúvida assim, estou enferrujado ainda preciso praticar mais. :sweat_smile:

3 curtidas