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:
O nome da tabela e da coluna a ser atualizada;
O novo valor para a coluna;
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 é 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. 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 poderem 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 pode atualizar nenhuma, uma, ou muitas linhas. Não é errado tentar uma atualização que não corresponda a nenhuma linha.
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 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 utilizado:
UPDATE produtos SET preco = preco * 1.10;
Como pode ser visto, a expressão para obter o novo valor pode fazer referência ao valor antigo. Também foi deixada de fora a cláusula WHERE. Quando esta cláusula é omitida, significa que todas as linhas da tabela serão atualizadas e, quando está presente, somente as linhas que atendem à condição desta cláusula serão atualizadas. Deve ser observado 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 cria uma ambigüidade. Obviamente, a condição da cláusula WHERE não é necessariamente um teste de igualdade, estão disponíveis vários outros operadores (consulte 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;