Ето пет начина да проверите дали таблица съществува или не в MySQL база данни.
table_exists()
Процедура
В MySQL sys.table_exists()
запомнената процедура тества дали дадена таблица съществува като обикновена таблица, TEMPORARY
маса или изглед. Процедурата връща типа на таблицата в OUT
параметър.
Пример:
CALL sys.table_exists('Music', 'Albums', @table_type);
SELECT @table_type;
Резултат:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Имайте предвид, че ако съществуват както временна, така и постоянна таблица с даденото име, TEMPORARY
се връща.
information_schema.TABLES
Таблица
Друг начин да проверите дали съществува таблица е да потърсите information_schema.TABLES
таблица:
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';
Резултат:
+--------------+------------+------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | +--------------+------------+------------+ | Music | Artists | BASE TABLE | +--------------+------------+------------+
В този случай върнах основната таблица, наречена Artists
от базата данни, наречена music
. Запитване за това без филтриране на резултатите по TABLE_SCHEMA
връща базови таблици от всички бази данни. Запитване без филтриране по TABLE_TYPE
връща всички типове таблици.
Ако нямаме нужда от цялата тази информация, можем да направим това:
SELECT EXISTS (
SELECT
TABLE_NAME
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists'
);
Резултат:
1
Или можем да получим броя:
SELECT COUNT(TABLE_NAME)
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists';
Резултат:
+-------------------+ | COUNT(TABLE_NAME) | +-------------------+ | 1 | +-------------------+
SHOW TABLES
Команда
SHOW TABLES
командата изброява не-TEMPORARY
таблици, последователности и изгледи в дадена MySQL база данни. Можем да използваме WHERE
клауза, за да го стесните до даден тип.
Можем също да използваме FULL
модификатор за връщане на втора колона, която показва типа:
SHOW FULL TABLES
WHERE Table_Type LIKE 'BASE TABLE'
AND Tables_in_music LIKE 'Albums';
Резултат:
+-----------------+------------+ | Tables_in_music | Table_type | +-----------------+------------+ | Albums | BASE TABLE | +-----------------+------------+
В този случай името на базата данни е music
, така че първата колона е Tables_in_music
.
SHOW TABLE STATUS
Команда
В MySQL, SHOW TABLE STATUS
командата е подобна на SHOW TABLES
команда, но предоставя по-подробна информация за всеки (не-TEMPORARY
) таблица.
Пример:
SHOW TABLE STATUS
FROM Music
WHERE Name = 'Albums';
Резултат:
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+ | 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
Клиент
Друг начин да проверите таблиците в MySQL база данни е да използвате mysqlshow
клиент.
За да използвате тази помощна програма, отворете прозорец на командния ред/терминал и изпълнете следното:
mysqlshow --user root --password music;
Не забравяйте да замените music
с базата данни, която ви интересува, и root
със съответния потребител. --password
бит води до подканване на потребителя за парола.
Резултат:
Enter password: Database: music +----------------+ | Tables | +----------------+ | Albums | | Artists | | Genres | | valbumsartists | | valbumsgenres | | vallalbums | | vallartists | | vallgenres | +----------------+
mysqlshow
клиентът връща изгледи и таблици.
Резултатът показва само имената на тези бази данни, таблици или колони, за които потребителят има някои привилегии.
Ако не е дадена база данни, се показват всички съвпадащи бази данни. Ако не е дадена таблица, тогава се показват всички съответстващи таблици в базата данни. Ако не е дадена колона, тогава се показват всички съвпадащи колони и типове колони в таблицата.
Проверете дали таблицата вече съществува, преди да я създадете
Ако трябва да създадете таблицата, ако тя не съществува, можете да използвате IF NOT EXISTS
клауза на CREATE TABLE
изявление. Ако таблицата не съществува, тя ще бъде създадена. Ако вече съществува, няма да бъде създаден.
Вижте как да проверите дали таблица вече съществува, преди да я създадете в MySQL за пример.