DELETE - Amazon Redshift

DELETE

Exclui linhas de tabelas.

nota

O tamanho máximo de uma única instrução SQL é 16 MB.

Sintaxe

[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ] DELETE [ FROM ] { table_name | materialized_view_name } [ { USING } table_name, ... ] [ WHERE condition ]

Parâmetros

Cláusula WITH

Cláusula opcional que especifica uma ou mais expressões de tabela-comum. Consulte Cláusula WITH.

FROM

A palavra-chave FROM é opcional, exceto quando a cláusula USING for especificada. As instruções delete from event; e delete event; são operações equivalentes que eliminam todas as linhas da tabela EVENT.

nota

Para excluir todas as linhas de uma tabela, use TRUNCATE na tabela. TRUNCATE é muito mais eficiente do que DELETE e não requer VACUUM nem ANALYZE. No entanto, esteja ciente de que TRUNCATE confirma a transação em que é executado.

table_name

Uma tabela temporária ou persistente. Somente o proprietário da tabela ou um usuário com o privilégio DELETE na tabela pode excluir linhas da tabela.

Considere usar o comando TRUNCATE para operações de exclusão não qualificadas rápidas em grandes tabelas. Consulte TRUNCATE.

nota

Depois de excluir um grande número de linhas de uma tabela:

  • Limpe a tabela para recuperar espaço e reclassificar as linhas.

  • Analise a tabela para atualizar as estatísticas do planejador de consulta.

materialized_view_name

Uma visão materializada. O comando DELETE funciona em uma visão materializada usada para Ingestão de streaming para uma visão materializada. Somente o proprietário da visão materializada ou um usuário com privilégio DELETE na visão materializada pode excluir linhas dela.

Você não pode executar DELETE em uma visão materializada para ingestão de streaming com uma política de segurança por linha (RLS) que não tenha a permissão IGNORE RLS concedida ao usuário. Há uma exceção: se o usuário que está executando DELETE tiver IGNORE RLS concedido, ele será executado com êxito. Para obter mais informações, consulte Propriedade e gerenciamento da política de RLS.

USING nome_tabela, ...

A palavra-chave USING é usada para inserir uma lista da tabela quando tabelas adicionais são mencionadas na condição de cláusula WHERE. Por exemplo, o comando a seguir exclui todas as linhas da tabela EVENT que atendem a condição de junção nas tabelas EVENT e SALES. A tabela SALES deve ser explicitamente denominada na lista FROM:

delete from event using sales where event.eventid=sales.eventid;

Se você repetir o nome da tabela de destino na cláusula USING, a operação DELETE executa uma junção automática. Você pode usar um subconsulta na cláusula WHERE em vez da sintaxe USING como alternativa para gravar a mesma consulta.

WHERE condição

Cláusula opcional que limita a exclusão de linhas àquelas que correspondem à condição. Por exemplo, a condição pode ser uma restrição em uma coluna, uma condição de junção ou uma condição baseada no resultado de uma consulta. A consulta pode fazer referência a tabelas diferentes do destino do comando DELETE. Por exemplo:

delete from t1 where col1 in(select col2 from t2);

Se nenhuma condição for especificada, todas as linhas na tabela serão excluídas.

Exemplos

Excluir todas as linhas da tabela CATEGORY:

delete from category;

Excluir linhas com valores CATID entre 0 e 9 da tabela CATEGORY:

delete from category where catid between 0 and 9;

Excluir linhas da tabela LISTING cujos valores SELLERID não existem na tabela SALES:

delete from listing where listing.sellerid not in(select sales.sellerid from sales);

As duas consultas a seguir excluem uma linha da tabela CATEGORY, com base em uma junção à tabela EVENTO e a uma restrição adicional na coluna CATID:

delete from category using event where event.catid=category.catid and category.catid=9;
delete from category where catid in (select category.catid from category, event where category.catid=event.catid and category.catid=9);

A consulta a seguir exclui todas as linhas da visão materializada mv_cities. Neste exemplo, o nome da visão materializada é uma amostra:

delete from mv_cities;