sql >> Database >  >> RDS >> Mysql

5 manieren om te controleren of een tabel bestaat in MySQL

Hier zijn vijf manieren om te controleren of een tabel al dan niet bestaat in een MySQL-database.

De table_exists() Werkwijze

In MySQL is de sys.table_exists() opgeslagen procedure test of een bepaalde tabel bestaat als een gewone tabel, een TEMPORARY tafel, of een uitzicht. De procedure retourneert het tabeltype in een OUT parameter.

Voorbeeld:

CALL sys.table_exists('Music', 'Albums', @table_type); 
SELECT @table_type;

Resultaat:

+-------------+
| @table_type |
+-------------+
| BASE TABLE  |
+-------------+

Merk op dat als er zowel een tijdelijke als een permanente tabel bestaat met de opgegeven naam, TEMPORARY wordt geretourneerd.

De information_schema.TABLES Tabel

Een andere manier om te controleren of een tabel bestaat, is door de information_schema.TABLES . op te vragen tabel:

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';

Resultaat:

+--------------+------------+------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE |
+--------------+------------+------------+
| Music        | Artists    | BASE TABLE |
+--------------+------------+------------+

In dit geval heb ik de basistabel geretourneerd met de naam Artists uit de database genaamd music . Dit opvragen zonder de resultaten te filteren op TABLE_SCHEMA retourneert basistabellen uit alle databases. Het opvragen zonder te filteren op TABLE_TYPE geeft alle tabeltypes terug.

Als we al die informatie niet nodig hebben, kunnen we dit doen:

SELECT EXISTS (
    SELECT 
        TABLE_NAME
    FROM 
    information_schema.TABLES 
    WHERE 
    TABLE_SCHEMA LIKE 'music' AND 
        TABLE_TYPE LIKE 'BASE TABLE' AND
        TABLE_NAME = 'Artists'
    );

Resultaat:

1

Of we kunnen de telling krijgen:

SELECT COUNT(TABLE_NAME)
FROM 
   information_schema.TABLES 
WHERE 
   TABLE_SCHEMA LIKE 'music' AND 
	TABLE_TYPE LIKE 'BASE TABLE' AND
	TABLE_NAME = 'Artists';

Resultaat:

+-------------------+
| COUNT(TABLE_NAME) |
+-------------------+
|                 1 |
+-------------------+

De SHOW TABLES Commando

De SHOW TABLES commando geeft de niet-TEMPORARY tabellen, sequenties en weergaven in een bepaalde MySQL-database. We kunnen de WHERE . gebruiken clausule om het te beperken tot een bepaald type.

We kunnen ook de FULL . gebruiken modifier om een ​​tweede kolom terug te geven die het type weergeeft:

SHOW FULL TABLES
WHERE Table_Type LIKE 'BASE TABLE'
AND Tables_in_music LIKE 'Albums';

Resultaat:

+-----------------+------------+
| Tables_in_music | Table_type |
+-----------------+------------+
| Albums          | BASE TABLE |
+-----------------+------------+

In dit geval is de databasenaam music , en dus is de eerste kolom Tables_in_music .

De SHOW TABLE STATUS Commando

In MySQL, de SHOW TABLE STATUS opdracht is vergelijkbaar met de SHOW TABLES commando maar geeft uitgebreidere informatie over elk (niet-TEMPORARY ) tafel.

Voorbeeld:

SHOW TABLE STATUS
FROM Music
WHERE Name = 'Albums';

Resultaat:

+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
| 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 |                |         |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+

De mysqlshow Klant

Een andere manier om de tabellen in een MySQL-database te controleren, is door de mysqlshow te gebruiken cliënt.

Om dit hulpprogramma te gebruiken, opent u een opdrachtregelprompt/terminalvenster en voert u het volgende uit:

mysqlshow --user root --password music;

Zorg ervoor dat u music vervangt met de database waarin u geïnteresseerd bent, en root met de betreffende gebruiker. Het --password bit resulteert erin dat de gebruiker om het wachtwoord wordt gevraagd.

Resultaat:

Enter password: 
Database: music
+----------------+
|     Tables     |
+----------------+
| Albums         |
| Artists        |
| Genres         |
| valbumsartists |
| valbumsgenres  |
| vallalbums     |
| vallartists    |
| vallgenres     |
+----------------+

De mysqlshow klant retourneert views en tabellen.

De uitvoer toont alleen de namen van die databases, tabellen of kolommen waarvoor de gebruiker bepaalde privileges heeft.

Als er geen database is opgegeven, worden alle overeenkomende databases getoond. Als er geen tabel is opgegeven, worden alle overeenkomende tabellen in de database getoond. Als er geen kolom is opgegeven, worden alle overeenkomende kolommen en kolomtypen in de tabel weergegeven.

Controleer of een tabel al bestaat voordat u deze maakt

Als u de tabel moet maken als deze niet bestaat, kunt u de IF NOT EXISTS gebruiken clausule van de CREATE TABLE uitspraak. Als de tabel niet bestaat, wordt deze gemaakt. Als het al bestaat, wordt het niet gemaakt.

Zie Hoe u kunt controleren of een tabel al bestaat voordat u deze in MySQL maakt voor een voorbeeld.


  1. Rethink Flask - Een eenvoudige takenlijst mogelijk gemaakt door Flask en RethinkDB

  2. Inleiding tot SQL Server-identiteit

  3. Hoe te voorkomen dat Activity Monitor de prestaties van uw SQL Server schaadt?

  4. Records van de laatste 10 minuten ophalen in MySQL