locked
INSERT dando erro em colunas de chave primária e estrangeira RRS feed

  • Pergunta

  • Estou começando estudar programação para banco de dados.

    Tenho um Data Base chamado VIDEOLOCADORA, nele tenho 2 tabelas: CATEGORIA E FILME.

    Na tabela CATEGORIA, a primeira coluna chamada COD_CATEGORIA é de auto incremento e primary key.

    Na tabela FILME, tenho as colunas: COD_FILME, FILME, COD_CATEGORIA(FK), DIRETOR, VALOR_LOCACAO e RESERVADA.

    Agora estou tentando fazer um INSERT de dados na tabela FILME assim:

    INSERT INTO FILME (FILME, DIRETOR, VALOR_LOCACAO, RESERVADA)

    VALUES ('O Ataque', 'Eu mesmo', 5, 'n')

    eu sei que se eu não expecificar uma coluna lá em cima, o banco automaticamente preenche o campo desta coluna como NULL, mas aí está o problema, essas duas colunas que eu nao escrevi alí são a chave primária da tabela FILME (COD_FILME) e a chave estrangeira que vme da tabela CATEGORIA (COD_CATEGORIA). Essas duas estão com auto incremento e não podem ser nulas. O seguinte erro é apresentado:

    Mensagem 515, Nível 16, Estado 2, Linha 1

    Não é possível inserir o valor NULL na coluna 'COD_CATEGORIA', tabela 'VIDEOLOCADORA.dbo.FILME'; a coluna não permite nulos. Falha em INSERT.

    Podem me ajudar?

    quinta-feira, 12 de setembro de 2013 14:46

Respostas

  • Bom dia Rodolfo,

    A situação é a seguinte, a tabela FILME onde você tem a chave estrangeira COD_CATEGORIA deve conter nesse campo o código da categorias correspondente da tabela CATEGORIA, pois o campo de chave estrangeira está como NOT NULL, ou seja, não aceita nulos.

    Vamos supor que sua tabela categorias tenha os seguintes códigos e descrições

    1 - Ação
    2 - Comédia
    3 - Romance
    4 - Terror
    5 - Outros

    Na hora do seu insert na tabela FILME você deverá referenciar qual a categoria que ele pertence, por exemplo:

    INSERT INTO FILME (FILME, DIRETOR, VALOR_LOCACAO, RESERVADA, COD_CATEGORIA)VALUES ('O Ataque', 'Eu mesmo', 5, 'n', 1)

    dessa forma será inserido o seu filme com a referência ação.

    Acho interessante você dar uma lida sobre modelo relacional de dados para ajudar na hora de realizar as operações.
    Segue uma sugestão: LINK


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    quinta-feira, 12 de setembro de 2013 15:02
  • Não é possível inserir o valor NULL na coluna 'COD_CATEGORIA', tabela 'VIDEOLOCADORA.dbo.FILME'; a coluna não permite nulos. Falha em INSERT.

    Chave Estrangeira não pode ser nula e tem que existir na tabela de referência, na prática seu insert ficaria assim:

    INSERT INTO FILME (FILME, DIRETOR, VALOR_LOCACAO, RESERVADA,COD_CATEGORIA )

    VALUES ('O Ataque', 'Eu mesmo', 5, 'n', 10)

    10= Registro existente na tabela Categoria

    Incremento- Define o valor a ser incrementado a cada novo insert, porém não é válido para chaves estrangeiras.

    Chave estrangeira (foreign key) é o campo que estabelece o relacionamento entre duas tabelas. Assim, uma coluna corresponde à mesma coluna que é a chave primária de outra tabela. Dessa forma, deve-se especificar na tabela que contém a chave estrangeira quais são essas colunas e à qual tabela está relacionada. O banco de dados irá verificar se todos os campos que fazem referências  à tabela estão especificados.


    quinta-feira, 12 de setembro de 2013 15:09

Todas as Respostas

  • Rodolfo

    Bom dia.. 

    No insert na tabela Filme, você é obrigado a incluir o campo FK, no caso COD_CATEGORIA, se não ele não consegue se referenciar com a tabela Categoria

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br


    • Editado Márcio S Silva quinta-feira, 12 de setembro de 2013 14:58
    • Sugerido como Resposta Márcio S Silva quinta-feira, 12 de setembro de 2013 14:59
    quinta-feira, 12 de setembro de 2013 14:57
  • Rodolfo

    Bom dia.. 

    No insert na tabela Filme, você é obrigado a incluir o campo FK, no caso COD_CATEGORIA, se não ele não consegue se referenciar com a tabela Categoria

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br


    Ah, o campo incremental serve apenas para incrementar um código na própria tabela, não apartir de outra tabela.. Então, teria que cadastrar primeiro a categoria, para depois referenciar ele na tabela filho.. 

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    • Sugerido como Resposta Márcio S Silva quinta-feira, 12 de setembro de 2013 15:01
    quinta-feira, 12 de setembro de 2013 15:01
  • Bom dia Rodolfo,

    A situação é a seguinte, a tabela FILME onde você tem a chave estrangeira COD_CATEGORIA deve conter nesse campo o código da categorias correspondente da tabela CATEGORIA, pois o campo de chave estrangeira está como NOT NULL, ou seja, não aceita nulos.

    Vamos supor que sua tabela categorias tenha os seguintes códigos e descrições

    1 - Ação
    2 - Comédia
    3 - Romance
    4 - Terror
    5 - Outros

    Na hora do seu insert na tabela FILME você deverá referenciar qual a categoria que ele pertence, por exemplo:

    INSERT INTO FILME (FILME, DIRETOR, VALOR_LOCACAO, RESERVADA, COD_CATEGORIA)VALUES ('O Ataque', 'Eu mesmo', 5, 'n', 1)

    dessa forma será inserido o seu filme com a referência ação.

    Acho interessante você dar uma lida sobre modelo relacional de dados para ajudar na hora de realizar as operações.
    Segue uma sugestão: LINK


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    quinta-feira, 12 de setembro de 2013 15:02
  • Não é possível inserir o valor NULL na coluna 'COD_CATEGORIA', tabela 'VIDEOLOCADORA.dbo.FILME'; a coluna não permite nulos. Falha em INSERT.

    Chave Estrangeira não pode ser nula e tem que existir na tabela de referência, na prática seu insert ficaria assim:

    INSERT INTO FILME (FILME, DIRETOR, VALOR_LOCACAO, RESERVADA,COD_CATEGORIA )

    VALUES ('O Ataque', 'Eu mesmo', 5, 'n', 10)

    10= Registro existente na tabela Categoria

    Incremento- Define o valor a ser incrementado a cada novo insert, porém não é válido para chaves estrangeiras.

    Chave estrangeira (foreign key) é o campo que estabelece o relacionamento entre duas tabelas. Assim, uma coluna corresponde à mesma coluna que é a chave primária de outra tabela. Dessa forma, deve-se especificar na tabela que contém a chave estrangeira quais são essas colunas e à qual tabela está relacionada. O banco de dados irá verificar se todos os campos que fazem referências  à tabela estão especificados.


    quinta-feira, 12 de setembro de 2013 15:09
  • Não é possível inserir o valor NULL na coluna 'COD_CATEGORIA', tabela 'VIDEOLOCADORA.dbo.FILME'; a coluna não permite nulos. Falha em INSERT.

    Chave Estrangeira não pode ser nula e tem que existir na tabela de referência, na prática seu insert ficaria assim:

    INSERT INTO FILME (FILME, DIRETOR, VALOR_LOCACAO, RESERVADA,COD_CATEGORIA )

    VALUES ('O Ataque', 'Eu mesmo', 5, 'n', 10)

    10= Registro existente na tabela Categoria

    Incremento- Define o valor a ser incrementado a cada novo insert, porém não é válido para chaves estrangeiras.

    Chave estrangeira (foreign key) é o campo que estabelece o relacionamento entre duas tabelas. Assim, uma coluna corresponde à mesma coluna que é a chave primária de outra tabela. Dessa forma, deve-se especificar na tabela que contém a chave estrangeira quais são essas colunas e à qual tabela está relacionada. O banco de dados irá verificar se todos os campos que fazem referências  à tabela estão especificados.



    Ótima resposta, muito obrigado ajudou muito.
    quinta-feira, 12 de setembro de 2013 15:56
  • Bom dia Rodolfo,

    A situação é a seguinte, a tabela FILME onde você tem a chave estrangeira COD_CATEGORIA deve conter nesse campo o código da categorias correspondente da tabela CATEGORIA, pois o campo de chave estrangeira está como NOT NULL, ou seja, não aceita nulos.

    Vamos supor que sua tabela categorias tenha os seguintes códigos e descrições

    1 - Ação
    2 - Comédia
    3 - Romance
    4 - Terror
    5 - Outros

    Na hora do seu insert na tabela FILME você deverá referenciar qual a categoria que ele pertence, por exemplo:

    INSERT INTO FILME (FILME, DIRETOR, VALOR_LOCACAO, RESERVADA, COD_CATEGORIA)VALUES ('O Ataque', 'Eu mesmo', 5, 'n', 1)

    dessa forma será inserido o seu filme com a referência ação.

    Acho interessante você dar uma lida sobre modelo relacional de dados para ajudar na hora de realizar as operações.
    Segue uma sugestão: LINK


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski


    Obrigado Kanaãm, muito boa sua resposta, ajudou muito.
    quinta-feira, 12 de setembro de 2013 15:58
  • Rodolfo

    Bom dia.. 

    No insert na tabela Filme, você é obrigado a incluir o campo FK, no caso COD_CATEGORIA, se não ele não consegue se referenciar com a tabela Categoria

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br


    Ah, o campo incremental serve apenas para incrementar um código na própria tabela, não apartir de outra tabela.. Então, teria que cadastrar primeiro a categoria, para depois referenciar ele na tabela filho.. 

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br


    Obrigado pela "resposta composta" amigo. foi de grande ajuda.
    quinta-feira, 12 de setembro de 2013 15:58