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:
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 é 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;