sql >> Databasteknik >  >> RDS >> Mysql

5 sätt att kontrollera om en tabell finns i MySQL

Här är fem sätt att kontrollera om en tabell finns i en MySQL-databas eller inte.

table_exists() Procedur

I MySQL, sys.table_exists() lagrad procedur testar om en given tabell existerar som en vanlig tabell, en TEMPORARY bord eller en vy. Proceduren returnerar tabelltypen i en OUT parameter.

Exempel:

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

Resultat:

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

Observera att om både en temporär och en permanent tabell finns med det angivna namnet, TEMPORARY returneras.

information_schema.TABLES Tabell

Ett annat sätt att kontrollera om en tabell finns är att fråga information_schema.TABLES tabell:

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

Resultat:

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

I det här fallet returnerade jag bastabellen som heter Artists från databasen som heter music . Frågar detta utan att filtrera resultaten efter TABLE_SCHEMA returnerar bastabeller från alla databaser. Frågar den utan att filtrera efter TABLE_TYPE returnerar alla tabelltyper.

Om vi ​​inte behöver all den informationen kan vi göra så här:

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

Resultat:

1

Eller så kan vi få räkningen:

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

Resultat:

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

SHOW TABLES Kommando

SHOW TABLES kommandot listar icke-TEMPORARY tabeller, sekvenser och vyer i en given MySQL-databas. Vi kan använda WHERE klausul för att begränsa den till en given typ.

Vi kan också använda FULL modifierare för att returnera en andra kolumn som visar typen:

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

Resultat:

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

I det här fallet är databasnamnet music , och så den första kolumnen är Tables_in_music .

SHOW TABLE STATUS Kommando

I MySQL, SHOW TABLE STATUS kommandot liknar SHOW TABLES kommando men ger mer omfattande information om var och en (icke-TEMPORARY ) tabell.

Exempel:

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

Resultat:

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

mysqlshow Klient

Ett annat sätt att kontrollera tabellerna i en MySQL-databas är att använda mysqlshow klient.

För att använda det här verktyget, öppna en kommandoradsprompt/terminalfönster och kör följande:

mysqlshow --user root --password music;

Se till att ersätta music med databasen du är intresserad av och root med den aktuella användaren. --password biten resulterar i att användaren tillfrågas om lösenordet.

Resultat:

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

mysqlshow klienten returnerar vyer och tabeller.

Utdatan visar endast namnen på de databaser, tabeller eller kolumner som användaren har vissa privilegier för.

Om ingen databas anges visas alla matchande databaser. Om ingen tabell anges visas alla matchande tabeller i databasen. Om ingen kolumn anges visas alla matchande kolumner och kolumntyper i tabellen.

Kontrollera om en tabell redan finns innan du skapar den

Om du behöver skapa tabellen om den inte finns kan du använda IF NOT EXISTS satsen i CREATE TABLE påstående. Om tabellen inte finns skapas den. Om den redan finns skapas den inte.

Se hur du kontrollerar om en tabell redan finns innan du skapar den i MySQL för ett exempel.


  1. Grunderna i SQL Server Transaction Log

  2. Mysql sträng delad

  3. Det går inte att skapa en instans av OLE DB-leverantörsfel som Windows-autentiseringsanvändare

  4. Brent Ozar förklarar SQL Server intern och extern fragmentering