Gibt es eine Möglichkeit zu überprüfen, ob eine Tabelle vorhanden ist, ohne Werte daraus auszuwählen und zu überprüfen?
Das heißt, ich weiß, dass ich SELECT testcol FROM testtable
die Anzahl der zurückgegebenen Felder überprüfen kann , aber es scheint, dass es einen direkteren / eleganteren Weg geben muss, dies zu tun.
Antworten:
Wenn Sie korrekt sein möchten, verwenden Sie INFORMATION_SCHEMA .
Alternativ können Sie verwenden
SHOW TABLES
Wenn die Ergebnismenge eine Zeile enthält, ist eine Tabelle vorhanden.
quelle
SELECT...FROM
Syntax ... Ich habe nach etwas gesucht wieEXISTS testtable
Wenn Sie eine Zählung ungleich Null erhalten, ist die Tabelle vorhanden.
quelle
TEMPORARY TABLE
nicht funktioniert.Ein Leistungsvergleich:
322 ms:
show tables like 'table201608';
691 ms:
select 1 from table201608 limit 1;
319 ms:
SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_SCHEMA = 'mydb') AND (TABLE_NAME = 'table201608');
Beachten Sie, dass wenn Sie dies häufig ausführen - wie bei vielen HTML-Anforderungen in kurzer Zeit - die zweite viel schneller ist, da sie durchschnittlich 200 ms oder schneller zwischengespeichert wird.
quelle
Sie können die
tables
Systemansicht INFORMATION_SCHEMA abfragen :Wenn keine Zeilen zurückgegeben werden, ist die Tabelle nicht vorhanden.
quelle
Nachdem ich alle oben genannten Punkte gelesen habe, bevorzuge ich die folgende Aussage:
Es zeigt genau an, was Sie tun möchten, und gibt tatsächlich einen 'Booleschen Wert' zurück.
quelle
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
Anstatt sich auf Fehler zu verlassen, können Sie abfragen
INFORMATION_SCHEMA.TABLES
, ob die Tabelle vorhanden ist. Wenn es einen Datensatz gibt, existiert er. Wenn es keine Aufzeichnung gibt, existiert sie nicht.quelle
SELECT FROM
. :-)Hier ist eine Tabelle, die kein SELECT * FROM ist
Ich habe dies von einem Datenbankprofi erhalten. Folgendes wurde mir gesagt:
quelle
Diese modifizierte Lösung von oben erfordert keine explizite Kenntnis der aktuellen Datenbank. Es ist dann flexibler.
quelle
Nur um eine zusätzliche Möglichkeit hinzuzufügen, und je nachdem, wofür Sie sie benötigen, können Sie einen Handler für den Fehler er_no_such_table verwenden : 1146 wie folgt :
quelle
zeige Tabellen wie 'table_name'
Wenn dies Zeilen> 0 zurückgibt, existiert die Tabelle
quelle
Sie können Folgendes tun:
quelle
Wenn man diese Antwort erweitert , könnte man eine Funktion weiter schreiben, die TRUE / FALSE zurückgibt, basierend darauf, ob eine Tabelle existiert oder nicht:
quelle
Diese kompakte Methode gibt 1 zurück, wenn vorhanden 0, wenn nicht vorhanden.
Sie können eine MySQL-Funktion eingeben
und nenne es
1 zurückgeben, falls vorhanden 0, falls nicht vorhanden.
quelle
Ich benutze dies in PHP.
quelle
Bei den Antworten hier sind einige Probleme zu beachten:
1)
INFORMATION_SCHEMA.TABLES
enthält keine TEMPORARY-Tabellen.2) Wenn Sie einen beliebigen
SHOW
Abfragetyp verwenden,SHOW TABLES LIKE 'test_table'
wird die Rückgabe einer Ergebnismenge an den Client erzwungen. Dies ist ein unerwünschtes Verhalten, um zu überprüfen, ob eine Tabelle serverseitig vorhanden ist, und zwar innerhalb einer gespeicherten Prozedur, die auch eine Ergebnismenge zurückgibt.3) Wie einige Benutzer erwähnt haben, müssen Sie vorsichtig sein, wie Sie verwenden
SELECT 1 FROM test_table LIMIT 1
.Wenn Sie etwas tun wie:
Sie erhalten nicht das erwartete Ergebnis, wenn die Tabelle keine Zeilen enthält.
Unten finden Sie eine gespeicherte Prozedur, die für alle Tabellen (auch TEMPORARY) funktioniert.
Es kann verwendet werden wie:
Der Code:
quelle
Dies war meine EXISTS-Prozedur, mit der sowohl temporäre als auch normale Tabellen überprüft werden. Dieses Verfahren funktioniert in MySQL Version 5.6 und höher. Der Parameter @DEBUG ist optional. Das Standardschema wird angenommen, kann jedoch mit der Tabelle in der @ s-Anweisung verknüpft werden.
Hier ist die Beispielaufrufanweisung mit @debug:
Die Variable @tblExists gibt einen Booleschen Wert zurück.
quelle
Keine der Optionen außer SELECT erlaubt keinen Datenbanknamen, wie er in SELECT verwendet wird. Deshalb habe ich Folgendes geschrieben:
quelle