SóProvas


ID
762169
Banca
FCC
Órgão
TCE-AM
Ano
2012
Provas
Disciplina
Banco de Dados
Assuntos

Considere o seguinte fragmento de linguagem SQL:

CREATE TABLE Carros (INT Código PRIMARY KEY, TEXT Modelo);

INSERT INTO Carros VALUES (NULL, "Alfa Romeo");

Após a execução da primeira linha do código acima, ao ser executado o código presente na segunda linha, será

Alternativas
Comentários
  • Até o momento, a resposta está como letra B.
    Espero que mudem isso, pois coluna de chave primária aceitar NULL... será dificil de justificar, tem que lançar um erro.
    Eita FCC!
  • Pelomenos nos bancos que já usei, nunca permitiam NULL nas chaves primárias.
    Talvez, no conceito de bancos de dados relacionais, possa existir um valor null na chave, contanto que seja único.
    Marquei letra E.
  • Uma chave primária não pode ter valores nulos, então a resposta é a letra E mesmo.


    Segue a fonte:
    http://www.w3schools.com/sql/sql_primarykey.asp
     
  • Acho que estão considerando a letra B pelo fato de no comando CREATE não especificar  O NOT NULL  apesar do campo ser Primary Key.
    Pela fonte citada do colega anterior todos comando tem o NOT NULL no campo chave.

    Acho que seria letra E se o Create ficasse assim:

    CREATE TABLE Carros (INT Not Null Código PRIMARY KEY, TEXT Modelo);

    Pegadinha!!!
  • PRIMARY KEY

    Especifica a coluna que identifica unicamente uma linha da tabela. A coluna identificada deve ser definida como NOT NULL.

    Fonte: http://db.apache.org/derby/docs/dev/pt_BR/ref/rrefsqlj13590.html

  • Pessoal, essa questão está totalmente errada, vejam o que diz o autor John J. Patrick em seu livro SQL Fundamentals third edition, a respeito das chaves primárias:

    Há duas regras que regulam as colunas da chave primária de uma tabela:

    1. Nenhuma das colunas da chave primária pode conter um valor nulo. este
    faz sentido porque um nulo é um valor desconhecido. Portanto, um nulo em
    qualquer parte da chave primária significa que não sabemos a identidade
    do objeto ou a linha. Em bancos de dados, que não queremos para inserir informações
    sobre linhas não identificadas.

    2. Cada linha deve ter uma identidade que é diferente de todas as outras linhas
    na tabela. Ou seja, não há duas linhas não podem ter a mesma identidade - a
    mesmos valores em todas as colunas da chave primária. Para quaisquer duas linhas
    da mesa, tem de haver pelo menos uma coluna da chave primária
    em que os valores são diferentes.

    Resumindo: Quando se define uma constraint do tipo primary key, se define também que aquele campo é UNIQUE, já um valor null é um valor desconhecido.
    Não há como identificar se um campo null é unico. 
  • A resposta correta deveria ser a resposta "E".
    Pois o valor poderia ser null , se e somente se, fosse informado que os valores seriam em auto-increment.
  • Restrição de integridade de entidade diz que nenhum valor da chave primária deve ser null
  • aparentemente a banca anulou a questão.
    como não há a possiblidade de visualizar o gabarito oficial final (disponibilizado só p/ quem fez a prova), não dá pra ter certeza.

    http://br.groups.yahoo.com/group/timasters/message/175718

  • A questão está certa.
     
    NULL é um valor indefinido, porém é uma chave válida.

    Além disto, a restrição de NOT NULL não foi explicitamente mencionada.

    A restrição de integridade de entidade como referenciada pelo colega aplica-se ao modelo relacional.
    Acho que o SQL utilizado em bancos relacionais oferecem maiores possibilidades.

    Se um segundo registro fosse inserido com a chavel NULL ai sim haveria um erro, porém de chave repetida.


  • Estão invertidos os tipos de dados de na declaração "INT Codigo PRIMARY KEY, TEXT Modelo". Não roda...
  • A FCC quer inventar... Ela deveria especificar em qual tipo de modelo de banco foi utilizada o SQL.

    Bom mas mesmo assim não aceito a resposta como B.

    Testei no postgres:
    1º questionamento: erro de sintaxe já dá no create, os domínios deveriam ser especificados após o nome da coluna
    2º questionamento: assim que cria a PK implicitamente já é add a restrição de NOT NULL
    3º questionamento: mesmo que fosse um campo auto incremento, a PK continuaria dando o erro
    4º questionamento: no postgres no INSERT teria que usar a aspas simples ('') ao invés ("")

    Por isso p/ se resguardar de possíveis questionamentos o correto seria a FCC mencionar qual o modelo de dados e utilizar SQL ANSI ou especificar o SGBD. Aí sim, estaria coberta

    Gabarito (na minha opinião): E
  • Paida o gabarito. Apesar de nenhum banco de dados aceitar isso, conceitualmente parece correto. Mas para aqueles que acham que a letra B está certa, digo somente uma coisa. Dúvido ser macho na hora pra marcar um coisa rídicula assim.
  • Pela documentação SQL 2003 (http://savage.net.au/SQL/sql-2003-2.bnf.html#unique specification) pode se ter uma CONSTRAINT sem NOT NULL, mas não quer dizer que os SGDBs implementem assim.
    Vejam:

    <column constraint>    ::= 
             NOT NULL 
         |     <unique specification>
         |     <references specification>
         |     <check constraint definition>
     
    <unique specification>    ::=   UNIQUE | PRIMARY KEY

    O NOT NULL é opcional (o simbolo | quer dizer "ou" exclusivo)

    Acho que o Firebird aceita NULL no Primary Key, mas não tenho certeza. Mas se fosse inserir o segundo NULL no campo da primary key, ele daria erro de restrição de unicidade (também chamada “integridade de entidade” ou unique constraint) com certeza.
  • Você pode testar em qualquer SGBD da face da terra e nenhum aceitará essa patifaria..

    SÓ A FCC MESMO!
  • Meus Caros,

    Por mais incrível que pareça, o SGBD MySQL aceita essa sintaxe, ou seja, quando o comando "Insert Into Carros Values(NULL, "Alfa Romeo);"  é executado, o depurador SQL vai transformar o NULL em 0, e portanto, permite salvar o registro.

    Se existe algum erro é na declaração "Create Table Carros (Int Código Primary Key, Text Modelo)", que será rejeitada pelo depurador, retornando um erro de sintaxe.

    Espero ter ajudado.

    Atenciosamente
  • CREATE TABLE Carros (codigo number(8) PRIMARY KEY,  Modelo varchar2(50)); 
    INSERT INTO Carros VALUES (NULL, 'Alfa Romeo');

    Resultado da execução dos comandos:

    ORA-01400: não é possível inserir NULL em ("CARROS"."CODIGO")