sql >> Database >  >> RDS >> MariaDB

4 manieren om te controleren of een tabel bestaat in MariaDB

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

De information_schema.TABLES Tabel

De information_schema.TABLES tabel bevat informatie over de verschillende niet-TEMPORARY tabellen (behalve tabellen uit de Informatie Schema database) en views op de server.

Hier is een voorbeeld van het opvragen van deze tabel:

SELECT 
   TABLE_SCHEMA, 
   TABLE_NAME,
   TABLE_TYPE
FROM 
   information_schema.TABLES 
WHERE 
   TABLE_SCHEMA LIKE 'PetHouse' AND 
	TABLE_TYPE LIKE 'BASE TABLE' AND
	TABLE_NAME = 'Pets';

Resultaat:

+--------------+------------+------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE |
+--------------+------------+------------+
| PetHouse     | pets       | BASE TABLE |
+--------------+------------+------------+

Hier heb ik de basistabel geretourneerd met de naam Pets uit de database genaamd PetHouse . 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 'PetHouse' AND 
        TABLE_TYPE LIKE 'BASE TABLE' AND
        TABLE_NAME = 'Pets'
    );

Resultaat:

1

Of we kunnen de telling krijgen:

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

Resultaat:

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

De SHOW TABLES Commando

De SHOW TABLES commando geeft de niet-TEMPORARY tabellen, sequenties en views in een bepaalde 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_pethouse LIKE 'Pets';

Resultaat:

+--------------------+------------+
| Tables_in_pethouse | Table_type |
+--------------------+------------+
| Pets               | BASE TABLE |
+--------------------+------------+

In dit geval is de databasenaam pethouse , en dus is de eerste kolom Tables_in_pethouse .

De SHOW TABLE STATUS Commando

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 PetHouse
WHERE Name = 'Pets';

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 | Max_index_length | Temporary |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+--------------------+----------+----------------+---------+------------------+-----------+
| Pets | InnoDB |      10 | Dynamic    |    8 |           2048 |       16384 |               0 |        32768 |         0 |           NULL | 2021-04-01 15:42:43 | NULL        | NULL       | utf8mb4_general_ci |     NULL |                |         |                0 | N         |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+--------------------+----------+----------------+---------+------------------+-----------+

De mariadb-show Klant

Een andere manier om dit te doen is met de mariadb-show nut.

Om deze optie te gebruiken, opent u een opdrachtregelprompt/terminalvenster en voert u het volgende uit (ter vervanging van pethouse met de database waarin u geïnteresseerd bent):

mariadb-show pethouse;

Resultaat:

+---------------+
|    Tables     |
+---------------+
| Owners        |
| PetTypes      |
| Pets          |
| vownercount   |
| vpetcount     |
| vpetsowners   |
| vpetstypes    |
| vpettypecount |
+---------------+

Dit levert views en tabellen op.

De uitvoer toont alleen de namen van die databases, tabellen of kolommen waarvoor u bepaalde rechten 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.

De client kan ook worden uitgevoerd als mysqlshow :

mysqlshow pethouse;

Dit hulpprogramma accepteert nogal wat opties, zoals --user (zodat u de gebruikersnaam kunt doorgeven), --password (zodat u het wachtwoord kunt doorgeven), enz.

Zie de documentatie van MariaDB voor een volledige lijst met opties.

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 voor een voorbeeld Hoe u een tabel kunt maken als deze niet in MariaDB bestaat.


  1. Probleem bij het vergelijken van het resultaat van to_char(myDate, 'DAY') met een string

  2. Oracle invoegen als rij niet bestaat

  3. Hoe selecteer ik efficiënt de vorige niet-null-waarde?

  4. Probleem met SQLiteOpenHelper op Android 2.X en 3.X