MySql - Crea tabella se non esiste altrimenti troncare?
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.
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:
- CREA TABELLA TEMPORANEA SE NON ESISTE fubar ( id int, nome varchar(80) )
- TRONCO TAVOLA fubar
- INSERISCI IN fubar SELEZIONA * DA barfu
o semplicemente rilascialo e ricrealo
- DROP TABLE SE ESISTE fubar
- 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 ;
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.