3.2. Atualização de dados

A modificação dos dados armazenados no banco de dados é referida como atualização. Pode ser atualizada uma linha da tabela, todas as linhas da tabela, ou um subconjunto das linhas. Cada coluna pode ser atualizada individualmente; as outras colunas não são afetadas.

Para efetuar uma atualização são necessárias três informações:

  1. O nome da tabela e da coluna;

  2. O novo valor para a coluna;

  3. Quais linhas serão atualizadas.

Lembre-se que foi dito no Capítulo 2 que o SQL, por si só, não fornece um identificador único para as linhas. Portanto, não é sempre possível poder especificar diretamente a linha que será atualizada. Em vez disso, devem ser especificadas as condições que a linha deve atender para ser atualizada. Somente havendo uma chave primária na tabela (não importando se foi declarada ou não) é possível endereçar uma linha específica, escolhendo uma condição corresponte à chave primária. Ferramentas gráficas de acesso a banco de dados dependem disto para poder atualizar as linhas individualmente.

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;

Este comando faz nenhuma, uma, ou muitas linhas serem atualizadas. Não é errado tentar fazer uma atualização sem nenhuma linha correspondente.

Vejamos este comando em detalhe: Primeiro aparece a palavra chave UPDATE seguida pelo nome da tabela. Como usual, o nome da tabela pode ser qualificado pelo esquema, senão é procurado no caminho. Depois aparece a palavra chave SET, seguida pelo nome da coluna, por um sinal de igual, e do novo valor da coluna. O novo valor da coluna pode ser qualquer expressão escalar, e não apenas uma constante. Por exemplo, sendo desejado aumentar o preço de todos os produtos em 10% pode ser usado:

UPDATE produtos SET preco = preco * 1.10;

Como pode ser visto, a expressão para obter o novo valor também pode referenciar o valor antigo. Também foi deixada de fora a cláusula WHERE. Quando a cláusula WHERE é omitida significa que todas as linhas da tabela serão atualizadas. Quando está presente, apenas as linhas atendendo a condição escrita após o WHERE serão atualizadas. Observe que o sinal de igual na cláusula SET é uma atribuição, enquanto o sinal de igual na cláusula WHERE é uma comparação, mas isto não causa ambigüidade. Obviamente, esta condição não precisa ser um teste de igualdade. Vários outros operadores estão disponíveis (veja o Capítulo 6), mas a expressão precisa produzir um resultado booleano.

Também pode ser atualizada mais de uma coluna pelo comando UPDATE, colocando mais de uma atribuição na cláusula SET. Por exemplo:

UPDATE minha_tabela SET a = 5, b = 3, c = 1 WHERE a > 0;