it-swarm-pt.tech

MySql - Criar Tabela Se Não Existir Else Truncate?

Aqui está a pergunta atualizada:

a consulta atual está fazendo algo como:

$sql1 = "TRUNCATE TABLE fubar";
$sql2 = "CREATE TEMPORARY TABLE IF NOT EXISTS fubar SELECT id, name FROM barfu";

Na primeira vez que o método que contém isto é executado, ele gera uma mensagem de erro no truncamento, pois a tabela ainda não existe.

Minha única opção é fazer o CREATE TABLE, executar o TRUNCATE TABLE e preencher a tabela? (3 consultas separadas)

pergunta original foi:

Eu tenho tido dificuldade em descobrir se o seguinte é possível no MySql sem ter que escrever bloco sql:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Se eu executar truncar separadamente antes da tabela create e a tabela não existir, recebo uma mensagem de erro. Estou tentando eliminar essa mensagem de erro sem precisar adicionar mais consultas.

Este código será executado usando PHP.

20
shmuel613

shmuel613, seria melhor atualizar sua pergunta original em vez de responder. É melhor se houver um único lugar contendo a pergunta completa, em vez de se espalhar em uma discussão.

A resposta de Ben é razoável, exceto que ele parece não ter um "não". Abandonar a tabela somente se não existir não estiver certo.

Você realmente precisará de várias declarações. Crie condicionalmente e preencha:

  1. CRIAR TABELA TEMPORÁRIA SE NÃO EXISTE fubar (id int, nome varchar (80))
  2. TABELA DE TRUNCA Fubar
  3. INSERT INTO fubar SELECT * FROM barfu

ou apenas soltar e recriar

  1. DROP TABLE IF EXISTS fubar
  2. CREATE TEMPORARY TABLE fubar ID SELECT, nome FROM barfu

Com o SQL puro, essas são suas duas classes reais de soluções. Eu gosto do segundo melhor.

(Com um procedimento armazenado, você poderia reduzi-lo a uma única instrução. Algo como: TruncateAndPopulate (fubar) Mas, quando você escrever o código para TruncateAndPopulate (), você gastará mais tempo do que apenas usando o SQL acima.

22
mdahlman

execute qualquer consulta se a tabela existir.

Uso: call Edit_table(database-name,table-name,query-string);

  • O procedimento verificará a existência de nome-da-tabela em nome-do-banco-de-dados e executará a sequência de consulta, se existir. A seguir está o procedimento armazenado:
DELIMITER $$

DROP PROCEDURE IF EXISTS `Edit_table` $$
CREATE PROCEDURE `Edit_table` (in_db_nm varchar(20), in_tbl_nm varchar(20), in_your_query varchar(200))
DETERMINISTIC
BEGIN

DECLARE var_table_count INT;

select count(*) INTO @var_table_count from information_schema.TABLES where TABLE_NAME=in_tbl_nm and TABLE_SCHEMA=in_db_nm;
IF (@var_table_count > 0) THEN
  SET @in_your_query = in_your_query;
  #SELECT @in_your_query;
  PREPARE my_query FROM @in_your_query;
  EXECUTE my_query;

ELSE
  select "Table Not Found";
END IF;

END $$
DELIMITER ;

Mais sobre o Mysql

3
kedar

Você poderia fazer o truncamento após o 'criar se não existe'. Dessa forma, sempre existirá ... e sempre estará vazio nesse ponto.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar
3
Mark Janssen

que tal:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Ou você quis dizer que só quer fazer isso com uma única consulta?

2
Ben

OK, então, não é ruim. Para ser mais específico, a consulta atual está fazendo algo como:

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "CRIAR TABELA TEMPORÁRIA SE NÃO EXISTE ID SELECT fubar, nome FROM barfu"; 

Na primeira vez que o método que contém isto é executado, ele gera uma mensagem de erro no truncamento, pois a tabela ainda não existe.

É minha única opção para fazer o "CREATE TABLE", executar o "TRUNCATE TABLE" e, em seguida, preencha a tabela? (3 consultas separadas)

PS - obrigado por responder tão rapidamente!

0
shmuel613

Se você estiver usando PHP, use mysql_list_tables para verificar se a tabela existe antes de TRUNCATE.

0
Lastnico