6.2. Atualização de dados #

A modificação dos dados que já estão no banco de dados é chamada de atualização. Podem ser atualizadas linhas individualmente, todas as linhas em uma tabela, ou um subconjunto de todas as linhas. Cada coluna pode ser atualizada separadamente; as outras colunas não são afetadas.

Para atualizar as linhas existentes é usado o comando UPDATE, onde são necessárias essas 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.

Lembre-se que foi dito no Capítulo 5 que o SQL, de uma maneira geral, não fornece um identificador único para as linhas. Portanto, não é sempre possível especificar diretamente qual linha 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 com confiança, escolhendo uma condição correspondendo à chave primária. Ferramentas gráficas de acesso a banco de dados dependem da chave primária para permitir a atualização de linhas individualmente.

Por exemplo, o comando mostrado abaixo atualiza todos os produtos com preço igual a 5, mudando esses preços para 10:

UPDATE produtos SET preco = 10 WHERE preco = 5;

Este comando pode atualizar nenhuma, uma, ou muitas linhas. Não é errado tentar uma atualização que não corresponda a nenhuma linha.

Vejamos esse 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 é usado o caminho de procura de esquema. Depois aparece a palavra-chave SET, seguida pelo nome da coluna, por um sinal de igual e pelo novo valor da coluna. O novo valor da coluna pode ser qualquer expressão escalar, e não apenas uma constante. Por exemplo, se for 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 calcular o novo valor pode fazer referência ao valor antigo. Também foi deixada de fora a cláusula WHERE. Quando essa cláusula é omitida, significa que todas as linhas da tabela serão atualizadas e, quando está presente, somente as linhas que atendem à condição da cláusula WHERE serão atualizadas. Note 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 isso não cria uma ambiguidade. Obviamente, a condição da cláusula WHERE não é necessariamente um teste de igualdade, estão disponíveis vários outros operadores (veja o Capítulo 9), mas a expressão deve 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;