Estou perplexo, não sei como fazer isso.
Basicamente, eu apenas quero criar uma tabela, mas se ela existir, ela precisará ser descartada e recriada, não truncada, mas se ela não existir, apenas crie-a.
Alguém seria capaz de ajudar?
Obrigado George
διαγραφή πίνακα, εφόσον υπάρχει
.Respostas:
Basta colocar
DROP TABLE IF EXISTS `tablename`;
antes da suaCREATE TABLE
declaração.Essa instrução descarta a tabela, se existir, mas não emitirá um erro se não existir.
fonte
DROP TABLE IF EXISTS 'table1', 'table2';
eDROP VIEW IF EXISTS 'view1', 'view2';
PS- Que bruxaria você usou para ter `s em código embutido !?Basta usar
DROP TABLE IF EXISTS
:Tente pesquisar a documentação do MySQL primeiro se tiver outros problemas.
fonte
Bem ... Huh. Durante anos, ninguém mencionou uma coisa sutil.
Apesar de
DROP TABLE IF EXISTS `bla`; CREATE TABLE `bla` ( ... );
parecer razoável, isso leva a uma situação em que a tabela antiga já se foi e a nova ainda não foi criada: alguns clientes podem tentar acessar a tabela de assuntos nesse momento.A melhor maneira é criar uma tabela nova e trocá-la por uma antiga (o conteúdo da tabela é perdido):
CREATE ...
e não continuar em caso de erro , porque falha significa que outro encadeamento não terminou o mesmo script: porque ele travou no meio ou simplesmente não terminou ainda - é uma boa ideia inspecione as coisas sozinho.RENAME ...
e não continue em caso de sucesso : toda a operação foi concluída com êxito; ainda mais, a execução seguinteRENAME ...
pode (e será) insegura se outro encadeamento já tiver iniciado a mesma sequência (é melhor cobrir este caso do que não, veja a nota de bloqueio abaixo).RENAME ...
substitui atomicamente a definição da tabela, consulte o manual do MySQL para obter detalhes.DROP ...
apenas limpa a mesa antiga, obviamente.Agrupar todas as instruções com algo como
SELECT GET_LOCK('__upgrade', -1); ... DO RELEASE_LOCK('__upgrade');
permite apenas invocá-las seqüencialmente sem verificação de erro, mas não acho que seja uma boa ideia: a complexidade aumenta e as funções de bloqueio no MySQL não são seguras para replicação baseada em instruções.Se os dados da tabela devem sobreviver à atualização da definição da tabela ... No caso geral, é uma história muito mais complexa sobre a comparação das definições da tabela para descobrir diferenças e produzir
ALTER ...
instruções apropriadas , o que nem sempre é possível automaticamente, por exemplo, quando as colunas são renomeadas.Nota lateral 1: você pode lidar com visualizações usando a mesma abordagem, neste caso,
CREATE/DROP TABLE
apenas se transforma emCREATE/DROP VIEW
enquantoRENAME TABLE
permanece inalterado. Na verdade, você pode até transformar a tabela em exibição e vice-versa.Nota lateral 2: Os usuários do MariaDB devem estar satisfeitos com o
CREATE OR REPLACE TABLE/VIEW
assunto, que já se preocupa com o problema do assunto e seus pontos positivos.fonte
Eu precisava soltar uma tabela e recriar com os dados de uma exibição. Eu estava criando uma tabela fora de uma visualização e foi isso que fiz:
O exemplo acima funcionou para mim usando o MySQL MariaDb.
fonte
CREATE OR REPLACE <table_name> AS SELECT * FROM <view>;