BANCO DE DADOS WEB AULA 12 manipulação de dados atualização e exclusão de registros professor Luciano Roberto Rocha www.lrocha.com Atualização de dados A modificação dos dados armazenados no banco de dados é referida como atualização. Pode ser atualizada uma linha, todas as linhas, ou um subconjunto das linhas da tabela. Uma coluna pode ser atualizada separadamente; as outras colunas não são afetadas. Para realizar uma atualização são necessárias três informações: 1. O nome da tabela e da coluna a ser atualizada; 2. O novo valor para a coluna; 3. Quais linhas serão atualizadas. 2 Atualização de dados A linguagem SQL, de uma maneira geral, não fornece um identificador único para as linhas. Portanto, não é necessariamente possível especificar diretamente a linha a ser atualizada. Em vez disso, devem ser especificadas as condições que a linha deve atender para ser atualizada. Por exemplo, o comando mostrado abaixo atualiza todos os produtos com preço igual a 5, mudando estes preços para 10: UPDATE produtos SET preco = 10 WHERE preco = 5; 3 Atualização de dados UPDATE: atualiza linhas de uma tabela. Sinopse UPDATE [ ONLY ] tabela SET coluna = { expressão | DEFAULT } [, ...] [ FROM lista_do_from ] [ WHERE condição ] Descrição O comando UPDATE muda os valores das colunas especificadas em todas as linhas que satisfazem a condição. Somente precisam ser mencionadas na cláusula SET as colunas que serão modificadas; as colunas que não serão modificadas explicitamente manterão seus valores atuais. Por padrão, o comando UPDATE atualiza linhas na tabela especificada e nas suas tabelas descendentes. Se for desejado atualizar apenas a tabela especificada, deverá ser utilizada a cláusula ONLY. 4 Atualização de dados Parâmetros tabela O nome (opcionalmente qualificado pelo esquema) da tabela a ser atualizada. coluna O nome de uma coluna da tabela. O nome da coluna pode ser qualificado pelo nome de um subcampo ou índice de matriz, se for necessário. expressão Uma expressão a ser atribuída à coluna. A expressão pode usar o valor antigo desta e de outras colunas da tabela. DEFAULT Define o valor da coluna como o seu valor padrão (que será nulo se não tiver sido atribuído à coluna nenhuma expressão padrão específica). lista_do_from Uma lista de expressões de tabela, que permite aparecerem colunas de outras tabelas na condição WHERE e nas expressões de atualização. É semelhante à lista de tabelas que pode ser especificada na cláusula Cláusula FROM do comando SELECT. condição Uma expressão que retorna um valor do tipo boolean. Somente são atualizadas as linhas para as quais esta expressão retorna true. 5 Atualização de dados Exemplos Mudar a palavra Drama para Dramático na coluna tipo da tabela filmes: UPDATE filmes SET tipo = 'Dramático' WHERE tipo = 'Drama'; Ajustar as entradas de temperatura e redefinir a precipitação com seu valor padrão em uma linha da tabela clima: UPDATE clima SET temp_min = temp_min+1, temp_max = temp_min+15, precipitacao = DEFAULT WHERE cidade = 'São Francisco' AND data = '2003-07-03'; Incrementar o contador de vendas do vendedor que gerencia a conta da Corporação Acme, usando a sintaxe da cláusula FROM: UPDATE empregados SET contador_de_vendas = contador_de_vendas + 1 FROM contas WHERE contas.nome = 'ACME' AND empregados.id = contas.vendedor; Realizar a mesma operação utilizando uma subseleção na cláusula WHERE: UPDATE empregados SET contador_de_vendas = contador_de_vendas + 1 WHERE id = (SELECT vendedor FROM contas WHERE nome = 'Corporação Acme'); 6 Atualização em transações O comando UPDATE pode ser utilizado em transações SQL para garantir a integridade das informações. Exemplo: Tentar inserir um novo item no estoque junto com a quantidade em estoque. Se o item já existir, em vez inserir, atualizar o contador de estoque do item existente. Para fazer isto, sem interromper toda a transação, é utilizado um ponto de salvamento. BEGIN; -- outras operações SAVEPOINT sp1; INSERT INTO vinhos VALUES('Chateau Lafite 2003', '24'); -- Assumindo que o comando acima falhou devido à violação de chave única, -- serão submetidos os comandos abaixo: ROLLBACK TO sp1; UPDATE vinhos SET estoque = estoque + 24 WHERE nome_do_vinho = 'Chateau Lafite 2003'; -- prosseguir com as outras operações e, finalmente, COMMIT; 7 Exclusão de dados Até aqui foi mostrado como adicionar dados a tabelas, e como modificar estes dados. Está faltando mostrar como remover os dados que não são mais necessários. Assim como só é possível adicionar dados para toda uma linha, uma linha também só pode ser removida por inteiro da tabela. O SQL não fornece uma maneira para endereçar diretamente uma determinada linha. Portanto, a remoção das linhas só pode ser feita especificando as condições que as linhas a serem removidas devem atender. 8 Exclusão de dados Para se excluir um registro é utilizado o comando DELETE. A sintaxe deste comando é muito semelhante a do comando UPDATE. Por exemplo, para remover todas as linhas da tabela produtos possuindo preço igual a 10: DELETE FROM produtos WHERE preco = 10; Se uma qualificação não for fornecida, o comando DELETE remove todas as linhas da tabela, deixando-a vazia. ATENÇÃO: O sistema não solicita confirmação antes de realizar esta operação!: DELETE FROM produtos; 9 Exclusão de dados DELETE: exclui linhas de uma tabela. Sinopse DELETE FROM [ ONLY ] tabela [ WHERE condição ] Descrição O comando DELETE exclui da tabela especificada as linhas que satisfazem a cláusula WHERE. Se a cláusula WHERE estiver ausente, o efeito será excluir todas as linhas da tabela. O resultado será uma tabela válida, porém vazia. Por padrão, o comando DELETE exclui linhas da tabela especificada e de todas as suas tabelas descendentes. Se for desejado excluir linhas apenas da tabela especificada, deve ser utilizada a cláusula ONLY. É necessário possuir o privilégio DELETE na tabela para excluir linhas da mesma, assim como o privilégio SELECT para todas as tabelas cujos valores são lidos pela condição. 10 Exclusão de dados Parâmetros tabela O nome (opcionalmente qualificado pelo esquema) de uma tabela existente. condição Uma expressão retornando um valor do tipo boolean, que determina as linhas a serem excluídas. 11 Exclusão de dados Exemplos Excluir todos os filmes, exceto os musicais: DELETE FROM filmes WHERE tipo <> 'Musical'; Limpar a tabela filmes: DELETE FROM filmes; 12 Exclusão de dados Observações O PostgreSQL permite que se faça referência a colunas de outras tabelas na condição WHERE. Por exemplo, para excluir todos os filmes produzidos por um determinado produtor pode ser utilizado: DELETE FROM filmes WHERE filmes.id_produtor = produtores.id_produtor AND produtores.nome = 'foo'; Esta sintaxe não é padrão. Uma forma mais padrão de se fazer isto é: DELETE FROM filmes WHERE id_produtor IN (SELECT id_produtor FROM produtores WHERE nome = 'foo'); Dica: O comando TRUNCATE é uma extensão do PostgreSQL que fornece um 13 mecanismo mais rápido para excluir todas as linhas da tabela. Exclusão de dados (TRUNCATE) TRUNCATE: esvazia a tabela. Sinopse TRUNCATE [ TABLE ] nome [CASCADE] Descrição O comando TRUNCATE remove rapidamente todas as linhas da tabela. Possui o mesmo efeito do comando DELETE não qualificado (sem WHERE), mas como na verdade não varre a tabela é mais rápido. É mais útil em tabelas grandes. Parâmetros nome O nome (opcionalmente qualificado pelo esquema) da tabela a ser truncada. 14 Exclusão de dados (TRUNCATE) Observações O comando TRUNCATE não pode ser usado quando existe referência de chave estrangeira de outra tabela para a tabela. Neste caso podese utilizar a opção CASCADE, porém tendo a consciência de que a integridade referencial dos dados será comprometida. Exemplos Truncar a tabela tbl_grande: TRUNCATE TABLE tbl_grande; Obs: Não existe o comando TRUNCATE no padrão SQL. 15