MySql - Tabelle erstellen falls nicht anders Kürzen existiert?
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.
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:
- CREATE TEMPORARY TABLE IF NOT EXISTS fubar (id int, name varchar (80))
- TRUNCATE TABLE fubar
- INSERT INTO fubar SELECT * FROM barfu
oder einfach löschen und neu erstellen
- DROP TABLE IF EXISTS fubar
- 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 ;
, 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.