Pergunta

Aqui está a questão actualização:

a consulta atual está fazendo algo como:

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

A primeira vez que o método que contém este é executado, ele gera uma mensagem de erro sobre a truncar uma vez que a tabela não existe.

É a minha única opção para fazer o CREATE TABLE, execute o TRUNCATE TABLE, e em seguida, preencher a mesa? (3 consultas separadas)

pergunta original era:

Eu tenho tido um tempo difícil tentando descobrir se o seguinte é possível em MySql sem ter que bloco sql escreve:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Se eu executar truncar separadamente antes da tabela criar, ea tabela não existe, então eu recebo uma mensagem de erro. Estou tentando eliminar essa mensagem de erro, sem ter que adicionar mais consultas.

Este código será executado usando PHP.

Foi útil?

Solução

shmuel613, seria melhor para atualizar sua pergunta original, em vez de responder. É melhor se houver um único local contendo a pergunta completa, em vez de tê-lo espalhar-se em uma discussão.

A resposta de Ben é razoável, exceto que ele parece ter um 'não', onde ele não quer um. Eliminando a tabela somente se ele não exist não é muito justo.

Você vai realmente precisar de várias declarações. De qualquer condicionalmente criar, em seguida, preencher:

  1. CREATE TABLE TEMPORÁRIA SE NÃO EXISTE fubar (int id, nome varchar (80))
  2. TRUNCATE TABLE fubar
  3. INSERT INTO fubar SELECT * DE barfu

ou simplesmente eliminar e recriar

  1. DROP TABLE IF EXISTS fubar
  2. CREATE TABLE TEMPORÁRIA fubar SELECT id, nome barfu

Com o SQL puro essas são as suas duas classes reais de soluções. I como o segundo melhor.

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

Outras dicas

Você poderia fazer o truncada após o 'criar se não existe'. Dessa forma, ele sempre vai existir ... e sempre estar vazio naquele ponto.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

executar qualquer consulta se existe tabela.

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

  • Procedimento irá verificar se há existência de table-name sob database-name e irá executar a consulta cordas se ele existir. Segue-se 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 Mysql

como sobre: ??

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Ou você quis dizer que você só quer fazê-lo com uma única consulta?

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

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

A primeira vez que o método que contém este é executado, ele gera uma mensagem de erro sobre a truncar uma vez que a tabela não existe.

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

PS - Obrigado por responder tão rapidamente

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top