Domanda

Ecco la domanda aggiornata:

la query corrente sta facendo qualcosa del tipo:

$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, viene generato un messaggio di errore sul troncamento poiché la tabella non esiste ancora.

È la mia unica opzione per farlo CREATE TABLE, corri il TRUNCATE TABLE, e poi riempire la tabella?(3 query separate)

la domanda originale era:

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

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Se eseguo trunca separatamente prima della creazione della tabella 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.

È stato utile?

Soluzione

shmuel613, sarebbe meglio aggiornare la tua domanda originale piuttosto che rispondere.È meglio se ci sia un unico posto che contenga la domanda completa piuttosto che averla sparpagliata in una discussione.

La risposta di Ben è ragionevole, tranne che sembra avere un "no" dove non ne vuole uno.Eliminare il tavolo solo se lo è no esistere non è del tutto corretto.

Avrai davvero bisogno di più dichiarazioni.Crea in modo condizionale e poi popola:

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

o semplicemente rilascialo e ricrealo

  1. DROP TABLE SE ESISTE fubar
  2. CREA TABELLA TEMPORANEA fubar SELEZIONA id, nome DA barfu

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

(Con una procedura memorizzata potresti ridurla a una singola istruzione.Qualcosa di simile a:TruncateAndPopulate(fubar) Ma quando scriverai il codice per TruncateAndPopulate() passerai più tempo che semplicemente usando l'SQL sopra.)

Altri suggerimenti

Potresti troncare dopo "crea se non esiste".Così esisterà sempre...ed essere sempre vuoto a quel punto.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

eseguire qualsiasi query se la tabella esiste.

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

  • La procedura controllerà l'esistenza del nome tabella in nome database ed eseguirà la stringa di query, 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

che ne dite di:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

O intendi semplicemente farlo con una singola query?

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

$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, viene generato un messaggio di errore sul troncamento poiché la tabella non esiste ancora.

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

PS: grazie per aver risposto così velocemente!

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top