mysql delete statement delete command syntax
Este tutorial explica como usar a instrução DELETE do MySQL para excluir dados de uma tabela ou excluir a tabela inteira e a diferença entre os comandos truncar e excluir:
No MySQL, DELETE é uma linguagem de manipulação de dados ou DML, como sabemos.
Como o próprio nome sugere, o comando é usado para excluir linhas da tabela. Usando este comando, podemos excluir uma ou mais linhas indesejadas em uma única transação. Existem várias maneiras de excluir registros de uma tabela usando o comando DELETE.
funções de amigo em c ++
Neste tutorial, discutiremos tudo isso em detalhes, juntamente com exemplos simples.
O que você aprenderá:
- Comando MySQL DELETE
- Diferença entre as instruções TRUNCATE e DELETE
- Integridade referencial e seu impacto no DELETE
- Perguntas e respostas mais frequentes
- Conclusão
Comando MySQL DELETE
Há um fator importante a se ter em mente antes de prosseguirmos. Qualquer linha ou várias linhas que excluímos usando o comando DELETE nunca podem ser recuperadas.
Assim, para evitar cenários onde uma linha é excluída por engano, é aconselhável fazer um backup da tabela antes de executar a instrução DELETE. Posteriormente, podemos usar este backup para restaurar a tabela em caso de erros.
Nota: Estamos usando o MySQL versão 8.0. Você pode baixá-lo de aqui .
Sintaxe de exclusão do MySQL:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
Explicação da sintaxe:
- A sintaxe inicia com a palavra-chave “DELETE FROM”, informando assim o servidor MySQL sobre o tipo de atividade a ser realizada. Esta é uma palavra-chave obrigatória e não pode ser omitida.
- Em seguida, vem o nome da tabela na qual a operação DELETE deve ser executada. Isso também é obrigatório e não pode ser omitido. Podemos mencionar um ou mais nomes de tabela aqui.
- A seguir, podemos mencionar qualquer condição que controle a elegibilidade das linhas a serem excluídas. Esta é uma cláusula opcional. A palavra-chave aqui é ONDE.
- Seguida pela cláusula WHERE está a cláusula ORDER BY, que força as linhas a serem excluídas em uma ordem específica, crescente ou decrescente, em uma (s) coluna (s). Esta é uma cláusula opcional.
- A cláusula LIMIT segue a cláusula ORDER BY. Limita o número de linhas que a instrução DELETE pode remover da tabela.
Modificadores na instrução DELETE
# 1) LOW_PRIORITY:
Este modificador informa o MySQL Engine para atrasar a execução da instrução DELETE até um momento em que não haja conexões lendo a tabela da qual estamos tentando DELETE.
Isso ajuda a alcançar consistência em todas as outras operações que serão executadas nessa tabela. Isso também ajuda a evitar problemas de bloqueio de tabela.
# 2) RÁPIDO:
Sempre que excluímos uma linha, o índice correspondente também é excluído. Recuperar o espaço no momento da execução da instrução DELETE consome o tempo do processador. Se usarmos a palavra-chave QUICK, o espaço de índice correspondente permanece inutilizado e pode ser utilizado quando novos registros que se adequam ao intervalo de índice que foi excluído anteriormente são inseridos.
Por exemplo, considere uma tabela de funcionários onde o ID do funcionário é o índice. Sempre que um funcionário deixa uma organização, precisamos excluir o registro correspondente. Se usarmos a cláusula QUICK, o espaço de índice correspondente permanecerá inutilizado.
Quando um novo funcionário ingressar, ele receberá um número de novo funcionário e não o mesmo número da pessoa que saiu. Em tais exemplos, não é aconselhável usar QUICK.
Exemplo de MYSQL DELETE
A seguir está uma tabela de exemplo criada em MYSQL.
Nome do esquema: pacífico
Nome da tabela: funcionários
Nomes de coluna:
empNum; Contém valores inteiros para o número do funcionário.
sobrenome: Contém valores varchar para o sobrenome do funcionário.
primeiro nome: Contém valores varchar para o nome do funcionário.
o email: Contém valores varchar para o ID de email do funcionário.
deptNum; Contém varchar para o ID do departamento ao qual um funcionário pertence.
salário: Detém os valores decimais do salário de cada funcionário.
data de início: Contém os valores de data para a data de adesão do funcionário.
Nome do esquema: pacífico
Nome da tabela: funcionários_história
Nomes de coluna:
empNum; Contém os valores inteiros para o número do funcionário.
sobrenome: Contém valores varchar para o sobrenome do funcionário.
primeiro nome: Contém valores varchar para o nome do funcionário.
o email: Contém valores varchar para o ID de email do funcionário.
deptNum; Contém varchar para o ID do departamento ao qual um funcionário pertence.
salário: Detém os valores decimais do salário de cada funcionário.
data de início: Contém valores de data para a data de adesão do funcionário.
Nome do esquema: pacífico
Nome da tabela: departamentos
Nomes de coluna:
deptNum; Contém varchar para o ID do departamento dentro de uma organização.
cidade: Contém o nome da cidade de onde funcionam os departamentos.
país: Contém o nome do país correspondente à cidade.
bônus: Contém o valor percentual do bônus.
MySQL Excluir linha única
A primeira e mais fácil maneira de excluir registros da tabela é excluir os registros um a um, usando uma cláusula WHERE muito forte que garante que apenas um registro adequado seja excluído. Isso poderia ser usado posteriormente para excluir um conjunto de tipos semelhantes de linhas da tabela.
Vamos examinar a instrução delete e sua execução em detalhes.
Aqui, tentaremos remover um funcionário chamado ‘Chris Nolan’ com o número de funcionário 1013.
Conforme ilustrado na imagem acima, a instrução DELETE foi executada com sucesso e excluiu uma linha da tabela do funcionário.
O resultado instrução abaixo mostra a hora em que a instrução foi executada, a instrução MySQL que foi executada e o número de linhas que foram afetadas.
Por favor, tenha certeza sobre a cláusula WHERE aqui. Se a cláusula WHERE estiver incorreta ou se você deixar de ter uma cláusula WHERE, isso pode resultar em perda de dados. Para evitar tais situações, na produção, há uma prática de backups ou descarregamentos periódicos de dados.
A fim de verificar a saída desta instrução DELETE, vamos executar a instrução SELECT nesta tabela com o empNum como 1013.
Os resultados de saída mostram o valor NULL para todas as colunas, o que significa que não existe nenhum registro para tal empNum. A saída da consulta abaixo mostra que 0 linha (s) foram retornadas, o que implica que o registro foi excluído pela execução da instrução DELETE acima.
Consulta:
DELETE FROM employees WHERE empNum = 1013 ;
Instantâneo da tabela após:
empNum | sobrenome | primeiro nome | o email | deptNum | Salário |
---|---|---|---|---|---|
7 | Isso é relativamente mais lento do que TRUNCATE, quando comparado para excluir dados inteiros da tabela. | Isso é relativamente mais rápido do que DELETE, quando comparado para excluir dados inteiros da tabela. | |||
NULO | NULO | NULO | NULO | NULO | NULO |
MySQL DELETE usando cláusula ORDER BY e LIMIT
ORDER BY e LIMIT são duas cláusulas que discutimos acima. O primeiro ajuda a decidir a ordem em que os registros devem ser eliminados, exclua os registros com empNum em ordem crescente ou exclua os registros com o salário em ordem decrescente. Este último ajuda a restringir o número de registros que essa transação pode excluir.
Por exemplo, se quisermos excluir apenas 2 funcionários pertencentes ao departamento número 4, que são tomadores de altos salários. Então, há três partes para essa consulta.
- Primeiro, precisamos eliminar os funcionários do departamento número 4. Isso será tratado por uma cláusula WHERE.
- Próximo, precisamos eliminar funcionários que estão ganhando altos salários. Isso será tratado pela cláusula ORDER BY na coluna de salários em ordem decrescente.
- Por último, precisamos purgar apenas dois funcionários. Isso será tratado pela cláusula LIMIT.
Vamos dar uma olhada na consulta DELETE e ver os resultados. Antes de fazer isso, vamos primeiro identificar quais são os registros exatos que queremos excluir. Usaremos as condições acima com uma instrução SELECT para obter os registros que desejamos excluir e, posteriormente, executar a mesma consulta para verificar se esses registros foram excluídos ou não.
Na consulta SELECT acima, satisfizemos todas as três condições que falamos acima usando as cláusulas WHERE, ORDER BY e LIMIT. A consulta nos deu 2 registros, um com empNum 1010 e outro com 1007. Agora, executaremos a consulta DELETE para garantir que esses dois registros sejam excluídos.
Conforme ilustrado na imagem acima, a instrução DELETE foi executada com sucesso e excluiu duas linhas da mesa do funcionário. O resultado instrução abaixo mostra a hora em que a instrução foi executada, a instrução MySQL que foi executada e o número de linhas que foram afetadas.
A fim de verificar a saída desta instrução DELETE, vamos executar o SELECT para empNum 1010 e 1007. Não podemos usar a mesma consulta SELECT usada acima, pois mostraria os outros funcionários sob deptNum 4.
Os resultados de saída mostram o valor NULL para todas as colunas, o que significa que não existe nenhum registro para esses números de funcionários. O Resultado da consulta abaixo mostra que 0 linha (s) foram retornadas, implicando que o registro foi excluído pela execução da instrução DELETE acima.
Consulta:
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
Instantâneo da tabela após:
empNum | sobrenome | primeiro nome | o email | deptNum | Salário |
---|---|---|---|---|---|
NULO | NULO | NULO | NULO | NULO | NULO |
MySQL DELETE usando a cláusula Select
A seguir, examinaremos o uso da cláusula SELECT ao excluir registros de uma tabela.
Considere o seguinte cenário:
Temos dois conjuntos de tabelas: funcionários e departamentos. deptNum é como uma chave primária na tabela do departamento e uma chave estrangeira na tabela do funcionário. Isso significa que se um funcionário for atribuído a um departamento, ele deve ser de um dos departamentos da tabela de departamentos.
Agora, temos que excluir esses registros da tabela do departamento onde nenhum funcionário foi atribuído até agora. Podemos fazer isso tendo uma cláusula SELECT na subconsulta de uma consulta DELETE.
Vamos primeiro identificar os registros que queremos excluir:
A consulta SELECT acima está tendo uma subconsulta.
O funcionamento da consulta é o seguinte:
A consulta extrai todos os registros da tabela do departamento onde o deptNum não existe na tabela do funcionário. A junção é realizada na subconsulta no deptNum das duas tabelas.
Agora vamos executar a consulta DELETE e ver se podemos excluir esses dois registros da tabela do departamento, já que nenhum funcionário é atribuído a esses departamentos.
Conforme ilustrado na imagem acima, a instrução de exclusão excluiu 2 linhas das tabelas de departamento que não têm nenhum funcionário atribuído a ela.
referência indefinida para c ++
A fim de verificar a saída dessa instrução DELETE, vamos executar SELECT na tabela e ver o que temos na saída.
A mensagem de saída da consulta de verificação acima diz “0 linha (s) retornada (s)”. Isso implica que as linhas com deptNum 6 e 7 são excluídas. A saída também não mostra nenhum registro em vez de mostrar valores NULL, pois os registros foram excluídos.
Consulta:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
MySQL DELETE Todos os dados da tabela
A seguir, veremos o cenário em que temos que deletar todas as linhas ou registros de uma tabela.
Na situação de produção, você nunca pode encontrar tal situação. Mas esse tipo de coisa seria necessário na área de desenvolvimento, onde você precisa testar seu código com vários cenários diferentes e pode querer recriar um novo conjunto de dados de teste excluindo os registros existentes na tabela.
Primeiro, vamos dar uma olhada nos dados que pretendemos excluir. Tentaremos excluir dados da tabela workers_history.
A seguir estão os dados atualmente existentes na tabela.
Aqui, temos 18 linhas na tabela workers_history. Vamos agora excluir tudo isso em uma única transação. A consulta é quase semelhante à que discutimos na primeira seção. A única mudança é que precisamos remover a cláusula WHERE da consulta para que não haja restrição ao número de linhas que queremos excluir.
Conforme ilustrado na imagem acima, a instrução delete foi executada com sucesso e excluiu todas as 18 linhas da tabela workers_history. A instrução de saída abaixo mostra a hora em que a instrução foi executada, a instrução MySQL que foi executada e o número de linhas que foram afetadas.
A fim de verificar a saída dessa instrução DELETE, vamos executar SELECT na tabela e ver o que temos na saída.
Os resultados de saída mostram o valor NULL para todas as colunas, o que significa que não existe nenhum registro para esses números de funcionários. A saída da consulta abaixo mostra que 0 linha (s) foram retornadas, o que implica que todos os registros foram excluídos pela execução da instrução DELETE acima.
Consulta:
DELETE FROM employees_history ;
Instantâneo da tabela após:
empNum | sobrenome | primeiro nome | o email | deptNum | Salário |
---|---|---|---|---|---|
NULO | NULO | NULO | NULO | NULO | NULO |
MySQL DELETE Whole Table
Agora, veremos o cenário em que temos que excluir a própria tabela. Em termos de SQL, nós o chamamos de DROP a tabela. Não importa se a tabela contém dados ou não. Ele simplesmente eliminará a tabela junto com os dados, se houver.
Na seção acima, excluímos os dados da tabela workers_history. Nesta seção, removeremos a própria tabela workers_history.
A seguir está o comando junto com sua saída:
Conforme ilustrado na imagem acima, a instrução DROP foi executada com sucesso e excluiu a tabela workers_history do catálogo do sistema do banco de dados MySQL.
Se você der uma olhada na mensagem, ela mostrará “0 linha (s) afetada (s)”. Isso ocorre porque excluímos todas as 18 linhas na seção anterior. Se esta tabela tivesse alguma linha, esse número de linhas seria afetado, o que implica exclusão.
A fim de verificar a saída desta instrução DROP, vamos executar SELECT na tabela e ver o que temos na saída.
A mensagem de saída da consulta de verificação acima diz que a tabela não existe. Isso valida nossa execução da instrução DROP acima para eliminar a tabela.
Consulta:
DROP TABLE employees_history ;
Comando Truncate MySQL
Já discutimos a exclusão de todos os registros da tabela usando o comando DELETE. O mesmo pode ser alcançado usando a instrução TRUNCATE também.
Para este exemplo, vamos recriar a tabela workers_history e preenchê-la novamente com dados. T A seguir estão as duas consultas que foram executadas para recriar a tabela e preenchê-la novamente:
Consulta:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
É assim que a tabela workers_history se parece agora com os dados.
A seguir, removeremos todos os registros desta tabela usando a instrução TRUNCATE.
Conforme mostrado na imagem, a consulta foi executada com sucesso. Se você olhar atentamente a parte “Mensagem”, verá que ela diz “0 linha (s) afetada (s)”. No entanto, sabemos que esta tabela contém 15 linhas. Então como é que mostra zero?
Razão: A instrução truncate não se preocupa em contar quantas linhas estão sendo impactadas por sua execução. Isso simplesmente esvazia a mesa. Esta é uma das diferenças significativas entre as instruções DELETE e TRUNCATE.
Vamos verificar a execução da instrução TRUNCATE executando uma consulta SELECT na tabela workers_history.
Conforme mostrado na imagem acima, a consulta não retornou nenhuma linha e também todas as colunas estão mostrando valores NULL, o que implica que a instrução TRUNCATE que executamos anteriormente excluiu todos os registros da tabela.
como visualizar um arquivo .dat
Consulta:
TRUNCATE TABLE employees_history ;
Diferença entre as instruções TRUNCATE e DELETE
Senhor não | EXCLUIR | TRUNCAR |
---|---|---|
1 | É uma DML (Linguagem de Manipulação de Dados). | É uma DDL (linguagem de definição de dados). |
dois | Qualquer gatilho AFTER DELETE na tabela é ativado quando usamos o comando DELETE. | Nenhum gatilho AFTER DELETE na tabela é ativado quando usamos o comando TRUNCATE. |
3 | Um registro pode ser excluído mesmo se houver qualquer restrição de chave estrangeira. | Os registros da tabela não podem ser truncados se houver alguma restrição de chave estrangeira. |
4 | A reinicialização da tabela não acontecerá. | A tabela será reinicializada. |
5 | A cláusula WHERE pode ser usada. | A cláusula WHERE não pode ser usada. |
6 | Isso exclui um registro por vez e mantém um controle do número total de registros excluídos nos logs. | Ele limpa todos os registros de uma vez e não mantém um registro do número de registros excluídos. |
Integridade referencial e seu impacto no DELETE
Antes de sermos, vamos ver o que é integridade referencial ou RI ou restrições de chave estrangeira?
As restrições de chave estrangeira referem-se ao estabelecimento de um relacionamento ou ligação entre a tabela pai e a tabela filho. Isso ajuda na referência cruzada dos dados nas tabelas vinculadas umas às outras. Uma tabela pai pode ter várias tabelas filho e vice-versa.
Por exemplo, as duas tabelas que discutimos até agora, ou seja, funcionários e departamentos, estão vinculadas entre si usando uma restrição de chave estrangeira. Essa restrição é estabelecida tornando uma coluna, geralmente a chave primária, a coluna-chave que liga duas tabelas.
A coluna deptNum na tabela do departamento foi vinculada à coluna deptNum na tabela do funcionário. Nesse caso, departamentos são a tabela pai e funcionários é a tabela filho.
Mas, como isso afeta as instruções DELETE?
No MySQL ou em qualquer banco de dados, existem certos cenários a serem tratados durante a exclusão de registros das tabelas pai ou filho.
Existem várias opções de referência que podemos discutir:
# 1) EM EXCLUIR CASCADA: A regra diz que não podemos remover uma linha da tabela pai se houver alguma referência ou se houver uma linha correspondente em qualquer uma das tabelas filho. No entanto, se uma tabela pai tem algumas tabelas filho, então é uma tarefa tediosa primeiro remover os registros de cada uma das tabelas filho e, em seguida, da tabela pai.
Para isso, existe uma solução alternativa chamada ON DELETE CASCADE. Esta é uma cláusula adicionada à instrução CREATE de cada uma das tabelas filho. Portanto, sempre que dizemos excluir uma linha da tabela pai, o mecanismo do MySQL primeiro identifica as referências dessa linha nas tabelas filho e remove esses registros e, por fim, exclui o registro da tabela pai.
# 2) NENHUMA AÇÃO: Esta é uma opção padrão. Se a execução de uma instrução DELETE tentar excluir um registro que tenha referências em qualquer uma das tabelas filho, então, com esta opção, a execução da instrução será interrompida e o Transação MySQL será revertido para o último ponto de confirmação.
# 3) RESTRIÇÃO: O funcionamento de RESTRICT e NO ACTION são iguais. Isso interromperá a execução e emitirá uma reversão.
# 4) DEFINIR NULO: Se a execução de uma instrução de exclusão tenta excluir um registro que tem referências em qualquer uma das tabelas filho, então esta opção irá atualizar o valor da coluna em todas as tabelas filho como NULL e uma vez feito, ele irá excluir o registro do pai tabela.
# 5) DEFINIR PADRÃO: Se a execução de uma instrução DELETE tentar excluir um registro que tenha referências em qualquer uma das tabelas filho, esta opção atualizará os valores da coluna para o valor padrão conforme definido na instrução CREATE da tabela.
Perguntas e respostas mais frequentes
P # 1) Como excluir dados da tabela no MySQL?
Responda: A sintaxe do comando delete para excluir apenas uma linha de dados selecionada é fornecida a seguir.
DELETE FROM table_name WHERE condition;
Q # 2) Como excluir todos os dados da tabela no MySQL?
Responda: A sintaxe do comando DELETE para excluir todas as linhas da tabela é:
DELETE * FROM table_name;
P # 3) Como excluir a tabela do banco de dados no MySQL?
Responda: O comando drop pode ser usado para excluir a tabela do banco de dados. O usuário pode substituir o table_name pela tabela que precisa ser excluída.
DROP TABLE table_name;
P # 4) Como excluir o banco de dados no MySQL?
Responda: O comando drop pode ser usado para excluir o banco de dados.
DROP Database db_name;
Os usuários podem substituir o db_name pelo nome do banco de dados que precisa ser excluído.
P # 5) O que é ON DELETE CASCADE no MySQL?
Responda: Quando o registro pai é excluído, ON DELETE CASCADE cria um registro filho correspondente a ser excluído. Assim, o efeito da exclusão é transmitido do pai para o filho. Isso pode ser útil na execução de exclusão de várias tabelas.
P # 6) Por que TRUNCATE é considerado uma instrução DDL?
Responda: A instrução TRUNCATE, na verdade, elimina e recria a tabela junto com os metadados da tabela. Portanto, é uma instrução DDL.
P # 7) O TRUNCATE pode ser revertido?
Responda: Não, TRUNCATE é uma instrução de auto-commit se executada de forma independente. Isso significa que não pode ser revertido, pois o commit também é executado junto com ele. Mas se for parte de uma transação, pode ser revertido usando os arquivos de log do SQL.
P # 8) As instruções DELETE podem ser revertidas?
Responda: Sim, as instruções DELETE podem ser revertidas. Basta executar o comando ROLLBACK antes de executar COMMIT.
P # 9) Uma coluna pode ser excluída usando o comando DELETE?
Responda: A adição ou exclusão de colunas são comandos DDL. Uma instrução ALTER deve ser usada para DROP uma coluna da tabela.
Conclusão
Neste tutorial, aprendemos diferentes maneiras de executar instruções DELETE no MySQL.
Resumindo, vimos:
- MySQL Excluir linha única
- Excluir MySQL usando ORDER BY e cláusula de limite
- Excluir MySQL usando cláusula de seleção
- MySQL Excluir Tabela Inteira
- MySQL Truncate
- Diferença entre instruções TRUNCATE e DELETE
- Integridade referencial e seus impactos no DELETE
Podemos usar qualquer uma das opções acima, com base no requisito.
Leitura feliz!!
Leitura recomendada
- Sintaxe de comando Unix Cat, opções com exemplos
- Comando de classificação Unix com sintaxe, opções e exemplos
- MySQL Insert Into Table - sintaxe e exemplos de instruções de inserção
- MongoDB Atualizar e Excluir Documento com Exemplos
- Cortar comando no Unix com exemplos
- Novos / excluir operadores em C ++ com exemplos
- Tutorial de instrução de atualização do MySQL - Atualizar sintaxe de consulta e exemplos
- Comando Ls no Unix com exemplos