Czy istnieje sposób sprawdzenia, czy tabela istnieje bez wybierania i sprawdzania z niej wartości?
To znaczy, wiem, że mogę SELECT testcol FROM testtable
sprawdzić liczbę zwróconych pól, ale wydaje się, że musi istnieć bardziej bezpośredni / elegancki sposób, aby to zrobić.
Odpowiedzi:
Jeśli chcesz być poprawny, użyj INFORMATION_SCHEMA .
Alternatywnie możesz użyć
SHOW TABLES
Jeśli w zestawie wyników znajduje się wiersz, tabela istnieje.
źródło
SELECT...FROM
składni ... Szukałem czegoś takiegoEXISTS testtable
jeśli otrzymasz niezerową liczbę, tabela istnieje.
źródło
TEMPORARY TABLE
to nie działa.Porównanie wydajności:
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');
Zwróć uwagę, że jeśli korzystasz z tego dużo - na przykład w przypadku wielu żądań HTML w krótkim okresie - drugi będzie znacznie szybszy, ponieważ będzie przechowywany w pamięci podręcznej średnio 200 ms lub szybciej.
źródło
Możesz wysłać zapytanie do
tables
widoku systemowego INFORMATION_SCHEMA :Jeśli nie zwrócono żadnych wierszy, tabela nie istnieje.
źródło
Po przeczytaniu powyższego wolę następujące stwierdzenie:
Wskazuje dokładnie, co chcesz zrobić, i w rzeczywistości zwraca wartość „boolean”.
źródło
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
Zamiast polegać na błędach, możesz zapytać,
INFORMATION_SCHEMA.TABLES
czy tabela istnieje. Jeśli istnieje zapis, to istnieje. Jeśli nie ma zapisu, to nie istnieje.źródło
SELECT FROM
. :-)Oto tabela, która nie jest SELECT * FROM
Mam to od profesjonalisty bazy danych, oto co mi powiedziano:
źródło
Powyższe zmodyfikowane rozwiązanie nie wymaga znajomości aktualnej bazy danych. Jest wtedy bardziej elastyczny.
źródło
Aby dodać dodatkowy sposób, aby to zrobić, iw zależności od tego, czego potrzebujesz, możesz użyć modułu obsługi dla błędu er_no_such_table : 1146 w ten sposób:
źródło
pokaż tabele, takie jak „nazwa_tabeli”
jeśli zwraca wiersze> 0, tabela istnieje
źródło
Możesz zrobić coś takiego jak poniżej:
źródło
Rozszerzając tę odpowiedź , można by dalej napisać funkcję, która zwraca PRAWDA / FAŁSZ na podstawie tego, czy tabela istnieje, czy nie:
źródło
Ta kompaktowa metoda zwraca 1, jeśli istnieje 0, jeśli nie istnieje.
Możesz wstawić do funkcji mysql
i nazwij to
zwraca 1 jeśli istnieje 0 jeśli nie istnieje.
źródło
Używam tego w php.
źródło
Z odpowiedziami należy zwrócić uwagę na kilka kwestii:
1)
INFORMATION_SCHEMA.TABLES
czy nie zawierają tabele tymczasowe.2) Korzystanie z dowolnego typu
SHOW
zapytania, tjSHOW TABLES LIKE 'test_table'
Wymusi zwrócenie zestawu wyników do klienta, co jest niepożądanym zachowaniem przy sprawdzaniu, czy tabela istnieje po stronie serwera, z procedury składowanej, która również zwraca zestaw wyników.3) Jak wspomnieli niektórzy użytkownicy, musisz uważać podczas używania
SELECT 1 FROM test_table LIMIT 1
.Jeśli zrobisz coś takiego:
Nie uzyskasz oczekiwanego wyniku, jeśli tabela ma zero wierszy.
Poniżej znajduje się procedura składowana, która będzie działać dla wszystkich tabel (nawet TYMCZASOWYCH).
Może być używany jako:
Kod:
źródło
To była moja procedura ISTNIEJE, która sprawdza zarówno tabele temp, jak i normalne. Ta procedura działa w MySQL w wersji 5.6 i nowszych. Parametr @DEBUG jest opcjonalny. Zakładany jest domyślny schemat, ale można go połączyć z tabelą w instrukcji @s.
Oto przykładowa instrukcja call z włączonym @debug:
Zmienna @tblExists zwraca wartość logiczną.
źródło
Żadna z opcji oprócz SELECT nie zezwala na nazwę bazy danych używaną w SELECT, więc napisałem to:
źródło