MySql - Criar tabela Se existe não truncar Else?
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.
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:
- CREATE TABLE TEMPORÁRIA SE NÃO EXISTE fubar (int id, nome varchar (80))
- TRUNCATE TABLE fubar
- INSERT INTO fubar SELECT * DE barfu
ou simplesmente eliminar e recriar
- DROP TABLE IF EXISTS fubar
- 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 ;
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.