检查 MariaDB 中是否存在表的 4 种方法

发布于

以下是检查 MariaDB 数据库中是否存在表的四种方法。

该表information_schema.TABLES

该表包含有关服务器上各种非表(信息架构数据库中的表除外)和视图的信息。information_schema.TABLES``TEMPORARY

下面是查询此表的示例:

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

结果:

+————–+————+————+ | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | +————–+————+————+ | PetHouse | pets | BASE TABLE | +————–+————+————+

在这里,我返回了从调用的数据库调用的基表。查询此内容而不按以下方式筛选结果会从所有数据库返回基表。在不按筛选方式的情况下查询它返回所有表类型。Pets``PetHouse``TABLE_SCHEMA``TABLE_TYPE

如果我们不需要所有这些信息,我们可以这样做:

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

结果:

1

或者我们可以得到计数:

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

结果:

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

命令SHOW TABLES

该命令列出给定数据库中的非表、序列和视图。我们可以使用 theclause 将其缩小到给定的类型。SHOW TABLES``TEMPORARY``WHERE

我们还可以使用 themodifier 返回显示类型的第二列:FULL

SHOW FULL TABLES
WHERE Table_Type LIKE 'BASE TABLE'
AND Tables_in_pethouse LIKE 'Pets';

结果:

+——————–+————+ | Tables_in_pethouse | Table_type | +——————–+————+ | Pets | BASE TABLE | +——————–+————+

在本例中,数据库名称为,因此第一列为。pethouse``Tables_in_pethouse

命令SHOW TABLE STATUS

命令类似于命令,但提供有关每个(非)表的更广泛信息。SHOW TABLE STATUS``SHOW TABLES``TEMPORARY

例:

SHOW TABLE STATUS
FROM PetHouse
WHERE Name = 'Pets';

结果:

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

客户mariadb-show

另一种方法是使用实用程序。mariadb-show

要使用此选项,请打开命令行提示符/终端窗口并运行以下命令(替换为您感兴趣的数据库):pethouse

mariadb-show pethouse;

结果:

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

这将返回视图和表。

输出仅显示您具有某些权限的数据库、表或列的名称。

如果未给出数据库,则显示所有匹配的数据库。如果未给出表,则显示数据库中所有匹配的表。如果未给出列,则显示表中所有匹配的列和列类型。

客户端也可以按以下方式运行:mysqlshow

mysqlshow pethouse;

该实用程序接受相当多的选项,例如(以便您可以传递用户名),(以便您可以传递密码)等。--user``--password

有关选项的完整列表,请参阅MariaDB 的文档。

在创建表之前检查表是否已存在

如果需要创建不存在的表,则可以使用 the语句的子句。如果表不存在,则将创建该表。如果它已存在,则不会创建它。IF NOT EXISTS``CREATE TABLE

有关示例,请参阅如何仅在 MariaDB 中不存在表时才创建表。