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?
- INSERT INTO REG_VIAGEM VALUES (7777, 720, ‘2022-04-21’)
- UPDATE PASSE SET NUM = 8888 WHERE NUM = 4444
- DELETE FROM REG_VIAGEM WHERE DATA_VIAGEM = ‘2021-09-02‘;
- INSERT INTO PASSE (NUM_VIAGENS, NUM) VALUES (10, 9999)
- 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