Mysql
 sql >> Database >  >> RDS >> Mysql

5 modi per verificare se esiste una tabella in MySQL

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.