FC ConcursosFC Concursos

Questão FC295895

Qual comando SQL NÃO produzirá um erro de tempo de execução independentemente dos dados existentes nas duas tabelas que fazem parte do banco de dados?

Linguagem SQL

CESGRANRIO · 2022

O controle diário da utilização de passes de metrô em uma cidade é feito por programas que utilizam um banco de dados composto pelas seguintes tabelas:

 

CREATE TABLE PASSE (

NUM INTEGER NOT NULL,

DATA_EXP DATE NOT NULL,

NUM_VIAGENS INTEGER NOT NULL,

PRIMARY KEY (NUM))

 

CREATE TABLE REG_VIAGEM (

NUM INTEGER NOT NULL,

NUM_ROLETA INTEGER NOT NULL,

DATA_VIAGEM DATE NOT NULL,

FOREIGN KEY (NUM)

REFERENCES PASSE (NUM))

 

A tabela PASSE contém uma linha para cada passe vendido pela empresa que administra o metrô. A coluna DATA_EXP informa a data de emissão do passe, e a coluna NUM_VIAGENS informa o número de viagens em que o passe poderá ser usado (número máximo de viagens). Este número não sofre alteração ao longo do tempo.

 

A tabela REG_VIAGEM contém uma linha para cada viagem em que o passe foi usado. A coluna NUM_ROLETA informa a roleta na qual o passe foi inserido, e a coluna DATA_VIAGEM informa a data em que o usuário inseriu o passe na roleta.

 

Qual comando SQL NÃO produzirá um erro de tempo de execução independentemente dos dados existentes nas duas tabelas que fazem parte do banco de dados?

  1. INSERT INTO REG_VIAGEM VALUES (7777, 720, ‘2022-04-21’)
  2. UPDATE PASSE SET NUM = 8888 WHERE NUM = 4444
  3. DELETE FROM REG_VIAGEM WHERE DATA_VIAGEM = ‘2021-09-02‘;
  4. INSERT INTO PASSE (NUM_VIAGENS, NUM) VALUES (10, 9999)
  5. DELETE FROM PASSE WHERE DATA_EXPIR = ‘2021-08-11‘
Mostrar resposta e comentário

Gabarito

Certo

Comentário do professor

O comando DELETE apresentado atua sobre a tabela REG_VIAGEM e utiliza a coluna DATA_VIAGEM, que existe na definição fornecida; por isso a instrução está sintaticamente e semanticamente correta.

Uma exclusão de linhas da tabela filha (child) não viola a foreign key que referencia PASSE, pois a restrição protege a existência de pai ao inserir/atualizar em REG_VIAGEM, mas não impede a remoção de registros filhos.

Se não houver linhas com DATA_VIAGEM = '2021-09-02', o comando simplesmente afetará 0 linhas — isso não é erro de tempo de execução; se houver linhas, serão removidas normalmente, sem violar NOT NULL ou chave primária.

Portanto, independentemente dos dados em ambas as tabelas, a instrução não produzirá erro em tempo de execução.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo