Frage

Hier ist die aktualisierte Frage:

Die aktuelle Abfrage tut so etwas wie:

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

Das erste Mal, das Verfahren diese enthält ausgeführt wird, erzeugt es eine Fehlermeldung auf dem truncate da die Tabelle noch nicht existiert.

Ist meine einzige Option, um den CREATE TABLE, führen Sie den TRUNCATE TABLE zu tun, und dann die Tabelle füllen? (3 separate Abfragen)

ursprüngliche Frage war:

Ich habe eine harte Zeit wurde mit versuchen, wenn folgenden in MySql ist möglich, um herauszufinden, ohne Block SQL zu schreiben:

CREATE TABLE fubar IF NOT EXISTS ELSE TRUNCATE TABLE fubar

Wenn ich vor der Tabelle erstellen gestutzt separat ausgeführt werden, und die Tabelle nicht existiert, dann bekomme ich eine Fehlermeldung. Ich versuche, diese Fehlermeldung zu beseitigen, ohne weitere Abfragen zu müssen.

Dieser Code wird ausgeführt werden PHP.

War es hilfreich?

Lösung

shmuel613, wäre es besser, Ihre ursprüngliche Frage zu aktualisieren, anstatt zu antworten. Es ist am besten, wenn es an einen einzigen Ort ist eher die vollständige Frage enthält, als wenn sie in einer Diskussion verteilt.

Ben Antwort ist vernünftig, außer er ‚nicht‘ ein zu haben scheint, wo er nicht einer will. Fallenlassen der Tabelle nur, wenn es nicht gibt, ist nicht ganz richtig.

Sie werden in der Tat mehrere Anweisungen benötigen. Entweder bedingt erstellen dann füllen:

  1. CREATE TEMPORARY TABLE IF NOT EXISTS fubar (id int, name varchar (80))
  2. TRUNCATE TABLE fubar
  3. INSERT INTO fubar SELECT * FROM barfu

oder einfach löschen und neu erstellen

  1. DROP TABLE IF EXISTS fubar
  2. CREATE TEMPORARY TABLE fubar SELECT id, name FROM barfu

Mit reinem SQL diejenigen sind Ihre zwei realen Klassen von Lösungen. Ich mag die zweite besser.

(mit einer gespeicherten Prozedur Sie es zu einer einzigen Anweisung reduzieren könnten so etwas wie:. TruncateAndPopulate (fubar) Aber durch die Zeit, schreiben Sie den Code für TruncateAndPopulate () Sie verbringen mehr Zeit als nur die SQL oben.)

Andere Tipps

Sie können den truncate nach dem ‚erstellen, wenn nicht vorhanden‘ tun. Auf diese Weise ist es immer geben wird ... und immer an dieser Stelle leer sein.

CREATE TABLE fubar IF NOT EXISTS
TRUNCATE TABLE fubar

Ausführen jede Abfrage, wenn die Tabelle vorhanden ist.

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

  • Verfahren für die Existenz von Tabellennamen unter Datenbank-Namen überprüfen und werden Abfrage-String ausführen, wenn es vorhanden ist. Im Anschluss wird die gespeicherte Prozedur:
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 auf Mysql

, wie etwa:

DROP TABLE IF EXISTS fubar;
CREATE TABLE fubar;

Oder hast du meinen Sie nur mit einer einzigen Abfrage tun wollen?

OK dann, nicht schlecht. Um genauer zu sein, die aktuelle Abfrage tut so etwas wie:

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

Das erste Mal, das Verfahren diese enthält ausgeführt wird, erzeugt es eine Fehlermeldung auf dem truncate da die Tabelle noch nicht existiert.

Ist meine einzige Option, um das „CREATE TABLE“, führen Sie das „TRUNCATE TABLE“ zu tun, und dann die Tabelle füllen? (3 separate Abfragen)

PS - Dank für die Beantwortung so schnell

Wenn Sie PHP verwenden, benutzen mysql_list_tables um zu überprüfen, dass die Tabelle es vor TRUNCATE vorhanden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top