Ecco cinque modi per verificare se esiste o meno una tabella in un database MySQL.
Il table_exists()
Procedura
In MySQL, il sys.table_exists()
stored procedure verifica se una determinata tabella esiste come una tabella normale, un TEMPORARY
tavolo o una vista. La procedura restituisce il tipo di tabella in un OUT
parametro.
Esempio:
CALL sys.table_exists('Music', 'Albums', @table_type);
SELECT @table_type;
Risultato:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Nota che se esistono sia una tabella temporanea che una permanente con il nome dato, TEMPORARY
viene restituito.
Il information_schema.TABLES
Tabella
Un altro modo per verificare se esiste una tabella è interrogare information_schema.TABLES
tabella:
SELECT
TABLE_SCHEMA,
TABLE_NAME,
TABLE_TYPE
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists';
Risultato:
+--------------+------------+------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | +--------------+------------+------------+ | Music | Artists | BASE TABLE | +--------------+------------+------------+
In questo caso, ho restituito la tabella di base chiamata Artists
dal database chiamato music
. Interrogazione senza filtrare i risultati per TABLE_SCHEMA
restituisce le tabelle di base da tutti i database. Interrogandolo senza filtrare per TABLE_TYPE
restituisce tutti i tipi di tabella.
Se non abbiamo bisogno di tutte queste informazioni, possiamo farlo:
SELECT EXISTS (
SELECT
TABLE_NAME
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists'
);
Risultato:
1
Oppure potremmo ottenere il conteggio:
SELECT COUNT(TABLE_NAME)
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists';
Risultato:
+-------------------+ | COUNT(TABLE_NAME) | +-------------------+ | 1 | +-------------------+
Il SHOW TABLES
Comando
Il SHOW TABLES
il comando elenca il non-TEMPORARY
tabelle, sequenze e viste in un dato database MySQL. Possiamo usare il WHERE
clausola per restringerla a un determinato tipo.
Possiamo anche usare il FULL
modificatore per restituire una seconda colonna che mostra il tipo:
SHOW FULL TABLES
WHERE Table_Type LIKE 'BASE TABLE'
AND Tables_in_music LIKE 'Albums';
Risultato:
+-----------------+------------+ | Tables_in_music | Table_type | +-----------------+------------+ | Albums | BASE TABLE | +-----------------+------------+
In questo caso il nome del database è music
, quindi la prima colonna è Tables_in_music
.
Lo SHOW TABLE STATUS
Comando
In MySQL, SHOW TABLE STATUS
il comando è simile a SHOW TABLES
comando ma fornisce informazioni più estese su ciascuno (non-TEMPORARY
) tabella.
Esempio:
SHOW TABLE STATUS
FROM Music
WHERE Name = 'Albums';
Risultato:
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+ | Albums | InnoDB | 10 | Dynamic | 20 | 819 | 16384 | 0 | 32768 | 0 | 21 | 2021-11-13 12:56:02 | 2021-11-13 12:56:13 | NULL | utf8mb4_0900_ai_ci | NULL | | | +--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
Il mysqlshow
Cliente
Un altro modo per controllare le tabelle in un database MySQL è usare mysqlshow
cliente.
Per utilizzare questa utilità, aprire un prompt della riga di comando/finestra del terminale ed eseguire quanto segue:
mysqlshow --user root --password music;
Assicurati di sostituire music
con il database che ti interessa e root
con l'utente applicabile. Il --password
bit fa sì che all'utente venga richiesta la password.
Risultato:
Enter password: Database: music +----------------+ | Tables | +----------------+ | Albums | | Artists | | Genres | | valbumsartists | | valbumsgenres | | vallalbums | | vallartists | | vallgenres | +----------------+
Il mysqlshow
il cliente restituisce viste e tabelle.
L'output mostra solo i nomi di quei database, tabelle o colonne per i quali l'utente dispone di alcuni privilegi.
Se non viene fornito alcun database, vengono visualizzati tutti i database corrispondenti. Se non viene fornita alcuna tabella, vengono visualizzate tutte le tabelle corrispondenti nel database. Se non viene fornita alcuna colonna, vengono visualizzate tutte le colonne e i tipi di colonna corrispondenti nella tabella.
Verifica se esiste già una tabella prima di crearla
Se devi creare la tabella se non esiste, puoi utilizzare il IF NOT EXISTS
clausola del CREATE TABLE
dichiarazione. Se la tabella non esiste, verrà creata. Se esiste già, non verrà creato.
Vedi Come verificare se una tabella esiste già prima di crearla in MySQL per un esempio.