BANCO DE DADOS WEB AULA 11 manipulação de dados inserção de registros professor Luciano Roberto Rocha www.lrocha.com Manipulação de dados Uma vez criada toda a estrutura de dados por meio dos comandos da sub-linguagem DDL, pode-se proceder a manipulação dos dados propriamente dita com o uso dos comandos DML (Data Manipulation Language). As operações básicas do subconjunto DML são: Inserção de dados em tabelas (INSERT) Atualização dos valores de um registro (UPDATE) Exclusão de valores de uma tabela (DELETE) Consulta de dados (SELECT) 2 Inserção de dados (INSERT) A primeira ação a ser realizada para o banco de dados ter utilidade é inserir dados. Conceitualmente, os dados são inseridos uma linha de cada vez. É claro que é possível inserir mais de uma linha, mas não existe maneira de inserir menos de uma linha por vez. Mesmo que se conheça apenas o valor de algumas colunas, deve ser criada uma linha completa. Para criar uma linha é utilizado o comando INSERT. Este comando requer o nome da tabela, e um valor para cada coluna da tabela. 3 Inserção de dados INSERT INTO: insere uma nova linha em uma tabela. Um exemplo de comando para inserir uma linha é: INSERT INTO produtos VALUES (1, 'Queijo', 9.99); Os valores dos dados são colocados na mesma ordem que as colunas se encontram na tabela, separados por vírgula. A sintaxe mostrada acima tem como desvantagem ser necessário conhecer a ordem das colunas da tabela. Para evitar isto, as colunas podem ser relacionadas explicitamente. INSERT INTO produtos (cod_prod, nome, preco) VALUES (1, 'Queijo', 9.99); INSERT INTO produtos (nome, preco, cod_prod) VALUES 4 ('Queijo', 9.99, 1); Inserção de dados Muitos usuários consideram boa prática escrever sempre os nomes das colunas. Se não forem conhecidos os valores de todas as colunas, as colunas com valor desconhecido podem ser omitidas. Neste caso, estas colunas são preenchidas com seu respectivo valor padrão. Por exemplo: INSERT INTO produtos (cod_prod, nome) VALUES (1, 'Queijo'); INSERT INTO produtos VALUES (1, 'Queijo'); A segunda forma é uma extensão do PostgreSQL, que preenche as colunas a partir da esquerda com quantos valores forem fornecidos, e as demais com o valor padrão. Para ficar mais claro, pode ser requisitado explicitamente o valor padrão da coluna individualmente, ou para toda a linha: INSERT INTO produtos (cod_prod, nome, preco) VALUES (1, 'Queijo', DEFAULT); INSERT INTO produtos DEFAULT VALUES; 5 Inserção de dados (COPY) Podemos usar o comando COPY para carregar todas as linhas em um comando, em vez de usar uma série de comandos INSERT. O comando COPY é otimizado para carregar uma grande quantidade de linhas; é menos flexível que o comando INSERT, mas ocasiona uma sobrecarga significativamente menor para cargas de dados volumosas. COPY: Copia dados entre um arquivo e uma tabela 6 Inserção de dados (COPY) Sinopse COPY nome_da_tabela [ ( coluna [, ...] ) ] FROM { 'nome_do_arquivo' | STDIN } [ [ WITH ] [ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimitador' ] [ NULL [ AS ] 'cadeia_de_caracteres_nula' ] [ CSV [ QUOTE [ AS ] 'demarcador' ] [ ESCAPE [ AS ] 'escape' ] [ FORCE NOT NULL coluna [, ...] ] COPY nome_da_tabela [ ( coluna [, ...] ) ] TO { 'nome_do_arquivo' | STDOUT } [ USING ] [ BINARY ] [ OIDS ] [ DELIMITER [ AS ] 'delimitador' ] [ NULL [ AS ] 'cadeia_de_caracteres_nula' ] [ CSV [ QUOTE [ AS ] 'demarcador' ] [ ESCAPE [ AS ] 'escape' ] [ FORCE QUOTE coluna [, ...] ] 7 Inserção de dados (COPY) Descrição O comando COPY copia dados entre tabelas do PostgreSQL e arquivos do sistema operacional. O comando COPY TO copia o conteúdo de uma tabela para um arquivo, enquanto o comando COPY FROM copia dados de um arquivo para uma tabela (adicionando os dados aos já existentes na tabela). Se for especificada uma lista de colunas, o comando COPY somente copia os dados das colunas especificadas de/para o arquivo. Havendo colunas na tabela que não estejam na lista de colunas, o comando COPY FROM insere o valor padrão destas colunas. 8 Inserção de dados (COPY FROM) Exemplos Copiar o conteúdo do arquivo “estados.sql” para a tabela estados: COPY estados FROM ‘/User/Shared/estados.sql’ WITH DELIMITERS ‘,’WITH NULL AS '\null'; Os dados no arquivo deverão possuir essa estrutura: 1,28,AC,Acre 2,28,AL,Alagoas 3,28,AP,Amapá 4,28,AM,Amazonas 5,28,BA,Bahia 6,28,CE,Ceará 7,28,DF,Distrito Federal 9 Inserção de dados (COPY TO) Exemplos Copiar os dados da tabela estados para o arquivo “estados.sql”: COPY estados TO ‘/User/Shared/estados.sql’ WITH DELIMITERS ‘,’WITH NULL AS '\null'; COPY estados TO ‘/User/Shared/estados.sql’; Se o delimitador for ocultado como no segundo exemplo o arquivo será gerado com os dados separados pelo caracter de tabulação em ASCII por padrão. Para recuperar os dados separados com esse caracter devemos utilizar ‘\t’ como opção na instrução WITH DELIMITERS. 10 Inserção de dados (COPY) Importante O comando COPY TO termina cada linha pelo caractere de novalinha (“\n”), no estilo Unix. Os servidores executando no Microsoft Windows em vez disto geram retorno-de-carro/nova-linha (“\r\n”), mas somente no COPY para um arquivo no servidor; O comando COPY FROM consegue tratar linhas terminando por nova-linha, retorno-de-carro, ou retorno-de-carro/nova-linha. Para reduzir o risco de erro devido a caracteres de nova-linha ou de retorno-de-carro sem contrabarra que fazem parte dos dados, o COPY FROM reclama se o final de todas as linhas de entrada não forem idênticos. 11 Referências Para saber mais consulte: Documentação oficial do PostgreSQL traduzida - pág. 736 Documentação oficial on-line: http://pgdocptbr.sourceforge.net/pg80/sql-copy.html h t t p : / / w w w. c o m m a n d p r o m p t . c o m / p p b o o k / x5504#COPYINGTHEBOOKSTABLETOASCII (em inglês) 12