如何判断表为临时表还是普通基表

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】
【遇到的问题:问题现象及影响】
【资源配置】

SHOW CREATE TABLE 表名;
得到表的创建语句,看下表名前有没有TEMPORARY
CREATE TEMPORARY TABLE users (
id BIGINT,
name VARCHAR(100),
city VARCHAR(50),
PRIMARY KEY(id)
);

有没有系统视图可以查看是否为临时表

可以根据如下系统表查询

SELECT 
        table_name, table_type 
FROM information_schema.tables 
WHERE table_schema = 'your-dbname';

临时表和普通表的table_type都是BASE TABLE

table_type = 'TEMPORARY’的是临时表,其余都是普通表

应该是没有系统表可以看到的。
https://docs.pingcap.com/zh/tidb/stable/dev-guide-use-temporary-tables#查看临时表信息
本地的临时表本身只存到内存中,全局的临时表我看table_type跟普通表一致。
或许可以通过建表的时候增加tmp关键字来辅助判断。

哦哦看了下还真是,看来我之前用这个统计的是有问题的 :smiley:
内部业务基本没有使用临时表

要判断一个表是临时表还是普通基表,可以通过以下几种方法:

  1. 使用SQL查询语句查看表类型

    • 在MySQL中,可以通过查询information_schema.tables表来查看表的类型。具体的SQL语句如下:
      SELECT TABLE_NAME, TABLE_TYPE
      FROM information_schema.tables
      WHERE table_schema = 'your_database_name';
      
      在上述查询中,TABLE_SCHEMA指定了要查询的数据库名称。TABLE_TYPE字段显示表的类型,通常为BASE TABLE(普通表)或VIEW(视图)。对于临时表,TABLE_TYPE会显示为TEMPORARY
  2. 查看表的属性

    • 在某些数据库管理系统中,比如Oracle,可以通过查询系统视图ALL_OBJECTS来判断表是否为临时表。具体的SQL语句如下:
      SELECT * FROM ALL_OBJECTS WHERE object_name LIKE '%TEM_1' AND temporary = 'Y';
      
      这里会查询出所有标记为临时(temporary = 'Y')的表。
  3. 使用数据库管理工具

    • 也可以使用数据库管理工具,如SQL Server Management Studio (SSMS)、MySQL Workbench或pgAdmin等,它们通常在表的属性窗口中显示表的类型信息。

应该能通过DDL语句来判断