Pular para conteúdo

DML - Linguagem de Manipulação de Dados

Introdução

A DML – Linguagem de Manipulação de Dados (Data Manipulation Language) é uma das principais categorias da linguagem SQL, sendo responsável pelas operações que envolvem a inserção, atualização, exclusão e consulta dos dados que estão armazenados nas tabelas do banco. Diferente da DDL, que se ocupa da definição da estrutura do banco (como a criação de tabelas e relações), a DML atua diretamente sobre os dados em si, permitindo que o sistema seja alimentado, mantido e consultado de forma dinâmica.

O uso correto da DML é fundamental para manter a integridade, consistência e atualidade dos dados, e seu domínio é indispensável para desenvolvedores, administradores de banco de dados e profissionais da área de tecnologia da informação. Entre os comandos mais utilizados da DML estão o INSERT que insere novos registros, o UPDATE que altera dados existentes, o DELETE que remove informações, e o SELECT que realiza consultas.

Metodologia

O banco de dados relacional utilizado foi o PostgreSQL. A manipulação dos dados foi realizada com base na estrutura definida anteriormente pelo modelo relacional e pelo diagrama Entidade-Relacionamento. Foram empregados comandos SQL pertencentes à Linguagem de Manipulação de Dados (DML), como INSERT para inserção de dados, UPDATE para alterações, DELETE para exclusões e SELECT para consultas. Todas as operações foram executadas diretamente no ambiente do PostgreSQL.

DML das Tabelas

Gangue

  • Insert

    INSERT INTO gangue (nome_gangue, descricao, qtdd_membros, qtdd_recurso_gangue) VALUES
        ('Os Fox River Eight', 'Grupo formado pelos fugitivos de Fox River. Unidos pela fuga, cada membro tem uma habilidade estratégica.', 8, 60),
        ('Mafia Abruzzi', 'Facção italiana comandada por John Abruzzi, envolvida com crimes organizados e tráfico de influência dentro da prisão.', 10, 45),
        ('Irmandade Ariana', 'Grupo supremacista branco dentro da penitenciária, violento e radical. Liderado por T-Bag.', 12, 40),
        ('La Familia', 'Grupo latino composto por membros de origens mexicanas e porto-riquenhas. Atua com lealdade interna e controle de rotas internas.', 14, 37),
        ('Os Justiceiros', 'Prisioneiros que agem sob o pretexto de justiça interna, combatendo delatores e traidores. Inspirados em atitudes de C-Note.', 7, 28);
    

  • Update

    -- Aumentar quantidade de membros da Gangue
    UPDATE Gangue
    SET qtdd_membros = qtdd_membros + 1
    WHERE nome_gangue = 'Os Fox River Eight'
    
    -- Aumentar quantidade de recursos da Gangue
    UPDATE Gangue
    SET qtdd_recurso_gangue = qtdd_recurso_gangue + 1
    WHERE nome_gangue = 'Os Fox River Eight'
    

  • Delete

    -- Deleta uma gangue (Não deve haver nenhum personagem associado a ela)
    DELETE FROM Gangue
    WHERE nome_gangue = 'Os Fox River Eight';
    

Inventario

  • Insert

    INSERT INTO inventario (id_inventario, qtd_itens, is_full) VALUES
        (100, 0, FALSE),        --Jogador
        (101, 0, FALSE),        --Cela do Jogador
        (102, 3, FALSE),        --Pátio Central
        (103, 0, FALSE);        --Enfermaria
    

  • Update

    -- Aumentar capacidade do inventário de id = 101
    UPDATE Inventario 
    SET qtd_itens = 25, is_full = TRUE
    WHERE id_inventario = 101;
    

  • Delete

    -- Deleta o inventário de id = 102 (Ele não deve estar associado a nenhuma sala)
    DELETE FROM Inventario
    WHERE id_inventario = 102;
    

Sala

  • Insert

    INSERT INTO sala (id_sala, id_inventario, nome, descricao, nivel_perigo, bloqueado) VALUES
        (1, 101, 'Cela de Detenção', 'Pequena cela com uma cama e um lavatório.', 0, FALSE),
        (2, 102, 'Pátio Central', 'Área aberta para recreação, com segurança reforçada.', 5, FALSE),
        (3, 103, 'Enfermaria', 'Local onde os detentos recebem cuidados médicos. Acesso restrito.', 2, TRUE);
    

  • Update

    -- Liberar o acesso à enfermaria
    UPDATE Sala SET bloqueado = FALSE, WHERE id_sala = 3;
    

  • Delete

    -- Remover sala de id = 1 (Detenção)
    DELETE FROM Sala
    WHERE id_sala = 1;
    

Missao

  • Insert

    INSERT INTO Missao (nome_missao, descricao, status) VALUES
        ('Missão de Confiança', 'Ganhar a confiança de um membro influente da máfia para obter recursos essenciais', false),
        ('Aliança Perigosa', 'Fazer uma aliança temporária com uma gangue rival para obter acesso a áreas restritas', false),
        ('Túnel da Liberdade', 'Construir um túnel secreto que leve para fora dos muros da prisão', false),
        ('Informante Infiltrado', 'Descobrir e neutralizar um informante que está vazando informações para os guardas', false),
        ('Distração Programada', 'Criar um incidente que distraia a atenção dos guardas no momento crítico da fuga', false),
        ('Fuga de Fox River', 'Planejar e executar a fuga da penitenciária Fox River, envolvendo múltiplos prisioneiros e etapas complexas', false),
        ('Rota Segura', 'Estabelecer um caminho seguro após a fuga, evitando captura pelos agentes penitenciários', false),
        ('Arquivos da Sona', 'Obter documentos secretos que provam a conspiração contra Lincoln Burrows', false);
    

  • Update

    -- Atualiza o status de missões concluídas
    UPDATE Missao
    SET status = true
    WHERE nome_missao IN ('Arquivos da Sona', 'Rota Segura');
    
    -- Corrige a descrição de uma missão
    UPDATE Missao
    SET descricao = 'Construir um túnel secreto que leve para fora dos muros da prisão, usando ferramentas improvisadas'
    WHERE noma_missao IN 'Túnel da Liberdade';
    

  • Delete

    DELETE FROM Missao
    WHERE noma_missao = 'Aliança Perigosa';
    

Item

  • Insert

    INSERT INTO Item (nome_item, descricao, durabilidade, pode_ser_vendido, nome_missao, utilidade, beneficio) VALUES
        ('Chave Inglesa', 'Ferramenta para apertar parafusos', 100, TRUE, 'Missão de Confiança', 'Abrir portas', 'Facilita fuga'),
        ('Lanterna', 'Ilumina ambientes escuros', 80, TRUE, 'Missão de Confiança', 'Iluminar', 'Ajuda em missões noturnas'),
        ('Mapa', 'Mostra a planta da prisão', 50, TRUE, 'Missão de Confiança', 'Navegação', 'Evita se perder');
    

  • Update

    -- Altera a durabilidade de um item
    UPDATE Item 
    SET durabilidade = 120 
    WHERE nome_item = 'Chave Inglesa';
    

  • Delete

    DELETE FROM Item 
    WHERE nome_item = 'Chave Inglesa';
    

Instancia Item

  • Insert

    INSERT INTO Instancia_Item (id_instancia, nivel_de_gasto, id_inventario, nome_item) VALUES
        (1, 10, 102, 'Chave Inglesa'),
        (2, 5, 102, 'Lanterna'),
        (3, 2, 102, 'Mapa');
    

  • Update

    -- Altera o nível de gasto de um item (Conserto ou uso do item)
    UPDATE Instancia_Item S
    SET nivel_de_gasto = 20 
    WHERE id_instancia = 1;
    

  • Delete

    DELETE FROM Instancia_Item 
    WHERE id_instancia = 1;
    

Item Loja

  • Insert

    INSERT INTO Item_Loja (id_compra, nome_gangue, nome_item) VALUES
        (1, 'Mafia Abruzzi', 'Chave Inglesa'),
        (2, 'La Familia', 'Lanterna'),
        (3, 'Os Fox River Eight', 'Mapa');
    

  • Update

    -- Altera a gangue que está vendendo o item
    UPDATE Item_Loja 
    SET nome_gangue = 'Os Renovados' 
    WHERE id_compra = 1;
    

  • Delete

    DELETE FROM Item_Loja 
    WHERE id_compra = 1;
    

Loja

  • Insert

    INSERT INTO Loja (nome_gangue, preco, nome_item) VALUES
        ('Mafia Abruzzi', 150.00, 'Chave Inglesa'),
        ('La Familia', 75.50, 'Lanterna'),
        ('Os Fox River Eight', 200.00, 'Mapa');
    

  • Update

    -- Altera o preço de um item
    UPDATE Loja 
    SET preco = 180.00 
    WHERE nome_gangue = 'Os Fugitivos' AND nome_item = 'Chave Inglesa';
    

  • Delete

    DELETE FROM Loja 
    WHERE nome_gangue = 'Os Fugitivos' AND nome_item = 'Chave Inglesa';
    

Consulta Personagem

  • Insert

    INSERT INTO Consulta_Personagem (
        tipo_personagem
    ) VALUES
        ('J'),
        ('AP'), ('AP'), ('AP'), ('AP'), ('AP'), ('AP'),
        ('P'), ('P'), ('P'), ('P'), ('P'), ('P'), ('P');
    

  • Update: A tabela Consulta_Personagem não possui update pois não há regra de negócio para isso.

  • Delete

    DELETE FROM consulta_personagem 
    WHERE id_personagem = 6;
    

Jogador

  • Insert

    INSERT INTO Jogador (id_personagem, nome, velocidade, vida, qtded_recurso, qtded_captura, id_sala, id_inventario, nome_missao, titulo_objetivo, nome_gangue) VALUES
        (1, 'Mauricio', 9, 100, 5, 0, 1, 100, NULL, NULL, NULL);
    
    -- Outros exemplos de inserção (Foi inserida somente uma tupla pois o jogo não é multiplayer)
    --    (11, 'Gabriel Souza', 8, 95, 4, 1, 102, 2, 'Fuga de Fox River', 'Sobreviver até a fuga', 'Os Fox River Eight'),
    --    (12, 'Rafael Costa', 7, 92, 3, 3, 103, 3, 'Rota Segura', 'Proteger a família', 'Os Justiceiros'),
    --    (13, 'Matheus Oliveira', 8, 90, 2, 2, 104, 4, 'Missão de Confiança', 'Provar lealdade', 'Mafia Abruzzi'),
    --    (14, 'João Almeida', 6, 85, 1, 1, 105, 5, 'Informante Infiltrado', 'Descobrir plano rival', 'La Familia');
    

  • Update

    -- Aumentar a velocidade do personagem 
    UPDATE Jogador
    SET velocidade = 8,
    WHERE id_personagem = 1;
    
    -- Aumentar vida do personagem 
    UPDATE Jogador
    SET vida = Vida + 25
    WHERE id_personagem = 1
    
    -- Aumentar quantidade de recurso do personagem
    UPDATE Jogador
    SET qtded_recurso = qtded_recurso + 1
    WHERE id_personagem = 1
    
    -- Aumentar quantidade de capturas do persoangem
    UPDATE Jogador
    SET qtded_captura = qtded_captura + 1
    WHERE id_personagem = 1
    
    -- Alterar sala que o personagem esta
    UPDATE Jogador
    SET id_sala = 2
    WHERE id_personagem = 1;
    
    -- Alterar a escolha da gangue do personagem
    UPDATE Jogador
    SET nome_gangue = 'Os Fox River Eight'
    WHERE id_personagem = 1;
    
    -- Desvincular personagem da gangue
    UPDATE Jogador
    SET nome_gangue = NULL
    WHERE nome_gangue = 'Os Fox River Eight';
    

  • Delete

    DELETE FROM Jogador
    WHERE id_personagem = 1;
    

Agente Penitenciario

  • Insert

    INSERT INTO Agente_Penitenciario(
        id_personagem, 
        id_sala, 
        nome, 
        velocidade, 
        nivel_de_perigo, 
        nivel_de_alerta, 
        corrupto, 
        preco, 
        cargo
    ) VALUES
        (2, 1, 'Brad Bellick', DEFAULT, 4, DEFAULT, true, 5, DEFAULT),
        (3, 2, 'Alex Mahone', DEFAULT, 8, DEFAULT, DEFAULT, DEFAULT, 'Policial Chefe'),
        (4, 1, 'Paul Kellerman', DEFAULT, 6, DEFAULT, true, 20, DEFAULT),
        (5, 3, 'Donald Self', DEFAULT, 3, DEFAULT, true, 10, DEFAULT),
        (6, 2, 'Warden Pope', DEFAULT, 10, DEFAULT, DEFAULT, DEFAULT, 'Diretor'),
        (7, 3, 'Sara Tancredi', DEFAULT, 0, DEFAULT, DEFAULT, DEFAULT, 'Médica');
    

  • Update

    -- Aumenta a velocidade e o nível de alerta do personagem
    UPDATE agente_penitenciario
    SET velocidade = 6, nivel_de_alerta = 10
    WHERE id_personagem = 6;
    
    -- Diminui a velocidade e o nível de alerta do personagem
    UPDATE agente_penitenciario
    SET velocidade = 5, nivel_de_alerta = 5
    WHERE id_personagem = 6;
    
    -- Nivel difícil
    UPDATE agente_penitenciario
    SET velocidade = 10, nivel_de_perigo = 10, nivel_de_alerta = 10
    WHERE id_personagem = 6;
    

  • Delete

    DELETE FROM agente_penitenciario 
    WHERE id_personagem = 6;
    

Agente Penitenciario - Jogador

  • Insert

    INSERT INTO Agente_Penitenciario_Jogador(
        id_personagem_jogador,      
        id_personagem_agente_penitenciario 
    ) VALUES
        (1, 2);
    

  • Update: A tabela Agente_Penitenciario_Jogador não possui update pois não há regra de negócio para isso.

  • Delete

    DELETE FROM agente_penitenciario_jogador 
    WHERE id_personagem_agente_penitenciario = 6;
    

Prisioneiro

  • Insert

    INSERT INTO Prisioneiro (id_personagem, nome, velocidade, vida, crime, id_sala, nome_gangue) VALUES
        (8, 'Michael Scofield', 8, 100, 'Assalto a banco (planejado para entrar na prisão)', 2, 'Os Fox River Eight'),
        (9, 'John Abruzzi', 6, 90, 'Homicídio e chefia em organização criminosa', 1, 'Mafia Abruzzi'),
        (10, 'Theodore "T-Bag" Bagwell', 5, 80, 'Estupro, sequestro e assassinato', 1, 'Irmandade Ariana'),
        (11, 'Fernando Sucre', 7, 95, 'Roubo à mão armada', 2, 'Os Fox River Eight'),
        (12, 'Benjamin "C-Note" Franklin', 8, 93, 'Tráfico e deserção militar', 2, 'Os Justiceiros'),
        (13, 'David "Tweener" Apolskis', 7, 85, 'Roubo e desacato', 2, 'Os Fox River Eight'),
        (14, 'Carlos Ortega', 6, 88, 'Tráfico de drogas e agressão', 3, 'La Familia'); 
    

  • Update

    -- Aumentar velocidade do prisioneiro
    UPDATE Prisioneiro
    SET velocidade = 10
    WHERE id_personagem = 8;
    
    -- Alterar sala do prisioneiro de forma aleatória
    UPDATE Prisioneiro
    SET id_sala = S.id_sala
    FROM (
        SELECT id_sala FROM Sala ORDER BY RANDOM() LIMIT 1
    ) AS S
    WHERE id_personagem = 8;
    
    -- Desvincular prisioneiros da gangue 
    UPDATE Prisioneiro
    SET nome_gangue = NULL
    WHERE nome_gangue = 'Os Fox River Eight';
    

  • Delete

    DELETE FROM Prisioneiro
    WHERE id_personagem = 8;
    

  • Insert

    INSERT INTO Dialogo (id_dialogo, id_personagem, nome_missao, texto, ordem) VALUES
        (1, 8, 'Fuga de Fox River', 'Lincoln, eu vou te tirar daqui. Confie em mim.', 1),
        (2, 8, 'Fuga de Fox River', 'Precisamos do plano exato da penitenciária. Alguém tem acesso aos arquivos?', 2),
        (3, 11, 'Fuga de Fox River', 'Michael, você tá maluco? Eles vão nos pegar!', 3),
        (4, 8, 'Fuga de Fox River', 'Cada segundo conta. O túnel deve estar pronto em 72 horas.', 4),
        (5, 9, 'Fuga de Fox River', 'Você tem meu avião, Scofield? Sem avião, sem ajuda.', 5),
        (6, 9, 'Missão de Confiança', 'Na minha família, lealdade se prova com sangue.', 1),
        (7, 8, 'Missão de Confiança', 'O que devo fazer para ganhar sua confiança, Abruzzi?', 2),
        (8, 9, 'Missão de Confiança', 'Traga-me a cabeça do traidor da ala oeste. Literalmente.', 3);
    

  • Update

    -- Mudança de dialogo
    UPDATE Dialogo
    SET texto = 'Lincoln eu te prometo que iremos sair daqu';
    WHERE id_dialogo = 1;
    

  • Delete

    DELETE FROM Dialogo
    WHERE id_dialogo = 3;
    

Objetivo Principal

  • Insert

    INSERT INTO Objetivo_Principal (titulo_objetivo, descricao) VALUES
        ('Libertar Lincoln', 'Objetivo principal de Michael Scofield: provar a inocência e libertar seu irmão Lincoln Burrows da prisão'),
        ('Sobreviver até a fuga', 'Manter-se vivo e fora do radar dos guardas até o momento da fuga planejada'),
        ('Proteger a família', 'Garantir a segurança da família enquanto o plano de fuga está em andamento'),
        ('Provar lealdade', 'Ganhar a confiança de membros-chave da gangue para obter ajuda na fuga'),
        ('Descobrir plano rival', 'Identificar e neutralizar planos de outras gangues que possam interferir na fuga'),
        ('Coletar recursos', 'Obter itens essenciais para a fuga, como ferramentas, uniformes e informações'),
        ('Distrair guardas', 'Criar distrações para permitir que partes críticas do plano sejam executadas'),
        ('Encontrar Sara', 'Localizar e resgatar a Dra. Sara Tancredi, aliada crucial para o plano de fuga');
    
    - Update
    ``` sql
    -- Modifica a descrição de um objetivo
    UPDATE Objetivo_Principal
    SET descricao = 'Provar a inocência e libertar seu irmão Lincoln Burrows da prisão, evitando sua execução'
    WHERE titulo_objetivo = 'Libertar Lincoln';
    

  • Delete

    DELETE FROM Objetivo_Principal_Missao 
    WHERE titulo_objetivo = 'Provar lealdade' AND nome_missao = 'Missão de Confiança';
    

Objetivo Principal - Missao

  • Insert

    INSERT INTO Objetivo_Principal_Missao (titulo_objetivo, nome_missao) VALUES
        ('Provar lealdade', 'Missão de Confiança'),
        ('Coletar recursos', 'Aliança Perigosa'),
        ('Sobreviver até a fuga', 'Túnel da Liberdade'),
        ('Descobrir plano rival', 'Informante Infiltrado'),
        ('Distrair guardas', 'Distração Programada'),
        ('Encontrar Sara', 'Fuga de Fox River'),
        ('Proteger a família', 'Rota Segura'),
        ('Libertar Lincoln', 'Arquivos da Sona');
    

  • Update: A tabela Objetivo_Principal_Missao não possui update pois não há regra de negócio para isso

  • Delete

    DELETE FROM Objetivo_Principal_Missao 
    WHERE titulo_objetivo = 'Provar lealdade' AND nome_missao = 'Missão de Confiança';
    

Missao - Sala

  • Insert

    INSERT INTO Missao_Sala (nome_missao, id_sala) VALUES
        ('Rota Segura', 3);
    

  • Update

    -- Altera missão que libera uma sala específica
    UPDATE Missao_Sala
    SET nome_missao = 'Fuga de Fox River'
    WHERE id_sala = 1;
    

  • Delete

    DELETE FROM Missao_Sala 
    WHERE nome_missao = 'Rota Segura' AND id_sala = 3;
    

📑 Histórico de versão

Versão Data Descrição Autor
1.0 05/06/2025 Criação da introdução e metodologia utilizada no DML Mayara A. Oliveira
1.1 07/06/2025 adicionando dados a tabela jogador, prisioneiro e gangue Mayara A. Oliveira
1.2 09/06/2025 Adiciona dados a tabela consulta_personagem, agente_penitenciario e agente_penitenciario_jogador Maria Alice
1.3 09/06/2025 Adiciona dados na tabelas missao, diálogo e objetivo principal Ana Carolina
1.4 09/06/2025 Adiciona dados na tabelas missão, inventário, sala Marllon Cardoso
1.5 09/06/2025 Adiciona dados na tabelas instancia-item, item, loja, item-loja Renann Gomes
1.6 09/06/2025 Organiza dados das tabelas e adiciona códigos pendentes que já estão no .sql Mayara A. Oliveira
1.7 12/06/2025 Organiza tabelas e atualiza códigos errados Maria Alice