it-swarm.it

MySql - Crea tabella se non esiste ancora tronca?

Ecco la domanda aggiornata:

la query corrente sta facendo qualcosa come:

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

La prima volta che viene eseguito il metodo che lo contiene, genera un messaggio di errore sul troncato poiché la tabella non esiste ancora.

La mia unica opzione è fare CREATE TABLE, eseguire TRUNCATE TABLE, e quindi riempire la tabella? (3 domande separate)

La domanda originale era:

Ho avuto difficoltà a cercare di capire se quanto segue è possibile in MySql senza dover scrivere il blocco sql:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Se eseguo troncato separatamente prima della tabella di creazione e la tabella non esiste, ricevo un messaggio di errore. Sto cercando di eliminare quel messaggio di errore senza dover aggiungere altre query.

Questo codice verrà eseguito utilizzando PHP.

20
shmuel613

shmuel613, sarebbe meglio aggiornare la tua domanda originale piuttosto che rispondere. È meglio se c'è un singolo posto che contiene la domanda completa piuttosto che averlo diffuso in una discussione.

La risposta di Ben è ragionevole, a parte il fatto che sembra avere un "non" in cui non ne vuole uno. Lasciare il tavolo solo se no esiste non è del tutto corretto.

Avrai davvero bisogno di più affermazioni. Quindi creare in modo condizionale quindi compilare:

  1. CREA TABELLA TEMPORANEA SE NON ESISTE fubar (id int, nome varchar (80))
  2. TABELLA DEI TRONCATI
  3. INSERISCI IN FUBAR SELEZIONA * DA barfu

o semplicemente cadere e ricreare

  1. DROP TABLE SE ESISTE fubar
  2. CREA TABELLA TEMPORANEA fubar ID SELECT, nome FROM barfu

Con SQL puro quelle sono le tue due vere classi di soluzioni. Mi piace il secondo migliore.

(Con una procedura memorizzata è possibile ridurla a una singola istruzione.Qualcosa come: TruncateAndPopulate (fubar) Ma prima che si scriva il codice per TruncateAndPopulate () trascorrerai più tempo rispetto all'utilizzo dell'SQL sopra.)

22
mdahlman

eseguire qualsiasi query se la tabella esiste.

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

  • La procedura verificherà l'esistenza del nome-tabella sotto nome-database ed eseguirà query-string se esiste. Di seguito è riportata la procedura memorizzata:
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 ;

Altro su Mysql

3
kedar

Potresti fare il troncato dopo "crea se non esiste". In questo modo esisterà sempre ... e sarà sempre vuoto a quel punto.

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

che ne dite di:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

O volevi dire che vuoi solo farlo con una singola query?

2
Ben

OK allora, non male. Per essere più specifici, la query corrente sta facendo qualcosa del tipo:

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "CREA TABELLA TEMPORANEA SE NON ESISTE fubar ID SELECT, nome FROM barfu"; 

La prima volta che viene eseguito il metodo che lo contiene, genera un messaggio di errore sul troncato poiché la tabella non esiste ancora.

È la mia unica opzione per fare "CREATE TABLE", eseguire la "TRUNCATE TABLE", e quindi riempire la tabella? (3 domande separate)

PS: grazie per aver risposto così velocemente!

0
shmuel613

Se stai usando PHP, usa mysql_list_tables per verificare che la tabella esista prima di TRONCATARLO.

0
Lastnico