it-swarm-eu.dev

MySql - Tabelle erstellen, wenn keine vorhanden ist, sonst abgeschnitten?

Hier ist die aktualisierte Frage:

die aktuelle Abfrage führt etwa Folgendes aus:

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

Bei der ersten Ausführung der Methode, die diese enthält, wird beim Abschneiden eine Fehlermeldung generiert, da die Tabelle noch nicht vorhanden ist.

Ist meine einzige Option, den CREATE TABLE auszuführen, den TRUNCATE TABLE auszuführen und dann die Tabelle zu füllen? (3 separate Anfragen)

Die ursprüngliche Frage war:

Ich hatte Schwierigkeiten, herauszufinden, ob in MySql Folgendes möglich ist, ohne den Block sql schreiben zu müssen:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Wenn ich vor der Erstellungstabelle separat schneide und die Tabelle nicht existiert, erhalte ich eine Fehlermeldung. Ich versuche, diese Fehlermeldung zu beseitigen, ohne weitere Abfragen hinzufügen zu müssen.

Dieser Code wird mit PHP ausgeführt.

20
shmuel613

shmuel613, wäre es besser, Ihre ursprüngliche Frage zu aktualisieren, anstatt zu antworten. Es ist am besten, wenn es einen einzigen Ort gibt, der die vollständige Frage enthält und nicht in einer Diskussion verbreitet wird.

Bens Antwort ist vernünftig, es sei denn, er scheint ein "Nicht" zu haben, wo er es nicht will. Das Löschen der Tabelle nur, wenn not nicht existiert, ist nicht ganz richtig.

Sie werden in der Tat mehrere Anweisungen benötigen. Erstellen Sie entweder bedingt und füllen Sie dann:

  1. CREATE TEMPORARY TABLE WENN NICHT EXISTS fubar (id int, name varchar (80))
  2. TRUNCATE TABLE Fubar
  3. INSERT INTO FUBAR SELECT * FROM Barfu

oder einfach fallen lassen und neu erstellen

  1. DROP TABLE WENN EXISTS fubar
  2. CREATE TEMPORARY TABLE fubar SELECT ID, Name FROM Barfu

Bei Pure SQL handelt es sich dabei um Ihre beiden realen Lösungsklassen. Ich mag die zweite besser.

(Mit einer gespeicherten Prozedur könnten Sie sie auf eine einzige Anweisung reduzieren. Etwas wie: TruncateAndPopulate (fubar). Wenn Sie jedoch den Code für TruncateAndPopulate () schreiben, benötigen Sie mehr Zeit als nur die oben genannte SQL.)

22
mdahlman

führen Sie eine beliebige Abfrage aus, wenn eine Tabelle vorhanden ist.

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

  • Die Prozedur überprüft das Vorhandensein des Tabellennamens unter dem Datenbanknamen und führt, falls vorhanden, eine Abfragezeichenfolge aus.
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 ;

Mehr zu MySQL

3
kedar

Sie könnten das Abschneiden nach dem 'Erstellen, wenn nicht vorhanden' ... _-Verfahren durchführen. Auf diese Weise wird es immer existieren ... und an diesem Punkt immer leer sein.

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

wie wäre es mit:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Oder meinten Sie, Sie möchten es nur mit einer einzigen Abfrage machen?

2
Ben

OK, nicht schlecht. Genauer gesagt führt die aktuelle Abfrage Folgendes aus:

 $ sql1 = "TRUNCATE TABLE fubar"; 
 $ sql2 = "CREATE TEMPORARY TABLE WENN NICHT EXISTS fubar SELECT id, Name FROM barfu";.

Bei der ersten Ausführung der Methode, die diese enthält, wird beim Abschneiden eine Fehlermeldung generiert, da die Tabelle noch nicht vorhanden ist.

Ist meine einzige Option, die "CREATE TABLE" auszuführen, die "TRUNCATE TABLE" auszuführen und dann die Tabelle zu füllen? (3 separate Anfragen)

PS - danke für die schnelle Antwort!

0
shmuel613

Wenn Sie PHP verwenden, überprüfen Sie mit mysql_list_tables , ob die Tabelle vor TRUNCATE vorhanden ist.

0
Lastnico