> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Atualização e exclusão de dados no ClickHouse

> Descreve como realizar operações de atualização e exclusão no ClickHouse

<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>

<div className="mt-2 flex flex-wrap gap-2">
  <Badge size="lg" color="blue">Armazenamento de dados</Badge>
  <Badge size="lg" color="orange">OSS</Badge>
</div>

Embora o ClickHouse seja voltado para cargas de trabalho analíticas de alto volume, em algumas situações é possível modificar ou
excluir dados existentes. Essas operações são chamadas de "mutações" e são executadas com o comando `ALTER TABLE`.

<Tip>
  Se você precisar realizar atualizações frequentes, considere usar [desduplicação](/pt-BR/concepts/features/operations/insert/deduplication) no ClickHouse, o que permite atualizar
  e/ou excluir linhas sem gerar uma mutação. Como alternativa, use [atualizações leves](/pt-BR/reference/statements/update)
  ou [exclusões leves](/pt-BR/concepts/features/operations/delete/lightweight-delete)
</Tip>

<div id="updating-data">
  ## Atualizando dados
</div>

Use o comando `ALTER TABLE...UPDATE` para atualizar linhas de uma tabela:

```sql theme={null}
ALTER TABLE [<database>.]<table> UPDATE <column> = <expression> WHERE <filter_expr>
```

`<expression>` é o novo valor da coluna quando `<filter_expr>` é satisfeito.  `<expression>` deve ter o mesmo tipo de dado da coluna ou poder ser convertido para esse tipo usando o operador `CAST`.  `<filter_expr>` deve retornar um valor `UInt8` (zero ou diferente de zero) para cada linha de dados.  Várias instruções `UPDATE <column>` podem ser combinadas em um único comando `ALTER TABLE`, separadas por vírgulas.

**Exemplos**:

1. Uma mutação como esta permite substituir `visitor_id` por novos valores usando uma consulta em Dicionário:

   ```sql theme={null}
   ALTER TABLE website.clicks
   UPDATE visitor_id = getDict('visitors', 'new_visitor_id', visitor_id)
   WHERE visit_date < '2022-01-01'
   ```

2. Modificar vários valores em um único comando pode ser mais eficiente do que executar vários comandos:

   ```sql theme={null}
   ALTER TABLE website.clicks
   UPDATE url = substring(url, position(url, '://') + 3), visitor_id = new_visit_id
   WHERE visit_date < '2022-01-01'
   ```

3. As mutações podem ser executadas `ON CLUSTER` em tabelas com shards:

   ```sql theme={null}
   ALTER TABLE clicks ON CLUSTER main_cluster
   UPDATE click_count = click_count / 2
   WHERE visitor_id ILIKE '%robot%'
   ```

<Note>
  Não é possível atualizar colunas que fazem parte da chave primária ou da chave de ordenação.
</Note>

<div id="deleting-data">
  ## Excluindo dados
</div>

Use o comando `ALTER TABLE` para excluir linhas:

```sql theme={null}
ALTER TABLE [<database>.]<table> DELETE WHERE <filter_expr>
```

A `<filter_expr>` deve retornar um valor UInt8 para cada linha de dados.

**Exemplos**

1. Exclua quaisquer registros em que uma coluna esteja em um array de valores:
   ```sql theme={null}
   ALTER TABLE website.clicks DELETE WHERE visitor_id in (253, 1002, 4277)
   ```

2. O que esta consulta altera?
   ```sql theme={null}
   ALTER TABLE clicks ON CLUSTER main_cluster DELETE WHERE visit_date < '2022-01-02 15:00:00' AND page_id = '573'
   ```

<Note>
  Para excluir todos os dados de uma tabela, é mais eficiente usar o comando `TRUNCATE TABLE [<database].]<table>`. Esse comando também pode ser executado `ON CLUSTER`.
</Note>

Consulte a página da documentação da [instrução `DELETE`](/pt-BR/reference/statements/delete) para mais detalhes.

<div id="lightweight-deletes">
  ## Exclusões leves
</div>

Outra opção para excluir linhas é usar o comando `DELETE FROM`, conhecido como **exclusão leve**. As linhas excluídas são marcadas como excluídas imediatamente e serão automaticamente filtradas de todas as consultas subsequentes, portanto você não precisa esperar pela mesclagem das partes nem usar a palavra-chave `FINAL`. A limpeza dos dados acontece de forma assíncrona em segundo plano.

```sql theme={null}
DELETE FROM [db.]table [ON CLUSTER cluster] [WHERE expr]
```

Por exemplo, a consulta abaixo exclui todas as linhas da tabela `hits` em que a coluna `Title` contém o texto `hello`:

```sql theme={null}
DELETE FROM hits WHERE Title LIKE '%hello%';
```

Algumas observações sobre exclusões leves:

* Esse recurso está disponível apenas para a família de mecanismos de tabela `MergeTree`.
* As exclusões leves são síncronas por padrão e aguardam que todas as réplicas processem a exclusão. Esse comportamento é controlado pela [configuração `lightweight_deletes_sync`](/pt-BR/reference/settings/session-settings#lightweight_deletes_sync).

<div className="mt-8">
  <a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
