Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


30.4.4.26 表是否存在的过程

测试一个给定的表是否存在为常规表、TEMPORARY表或视图。该过程返回一个OUT参数,表示表的类型。如果存在一个临时表和一个永久表具有相同的名称,TEMPORARY将被返回。

  • in_db VARCHAR(64): 需要检查的数据库名称。

  • in_table VARCHAR(64): 需要检查的表名称。

  • out_exists ENUM('', 'BASE TABLE', 'VIEW', 'TEMPORARY'): 返回值。这是一个OUT参数,因此它必须是一个变量,以便将表类型存储在其中。该过程返回时,该变量将具有以下值之一,以指示表是否存在:

    • '': 表名不存在为常规表、TEMPORARY表或视图。

    • BASE TABLE: 表名存在为常规(永久)表。

    • VIEW: 表名存在为视图。

    • TEMPORARY: 表名存在为TEMPORARY表。

mysql> CREATE DATABASE db1;
Query OK, 1 row affected (0.01 sec)

mysql> USE db1;
Database changed

mysql> CREATE TABLE t1 (id INT PRIMARY KEY);
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TABLE t2 (id INT PRIMARY KEY);
Query OK, 0 rows affected (0.20 sec)

mysql> CREATE view v_t1 AS SELECT * FROM t1;
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TEMPORARY TABLE t1 (id INT PRIMARY KEY);
Query OK, 0 rows affected (0.00 sec)

mysql> CALL sys.table_exists('db1', 't1', @exists); SELECT @exists;
Query OK, 0 rows affected (0.01 sec)

+-----------+
| @exists   |
+-----------+
| TEMPORARY |
+-----------+
1 row in set (0.00 sec)

mysql> CALL sys.table_exists('db1', 't2', @exists); SELECT @exists;
Query OK, 0 rows affected (0.02 sec)

+------------+
| @exists    |
+------------+
| BASE TABLE |
+------------+
1 row in set (0.00 sec)

mysql> CALL sys.table_exists('db1', 'v_t1', @exists); SELECT @exists;
Query OK, 0 rows affected (0.02 sec)

+---------+
| @exists |
+---------+
| VIEW    |
+---------+
1 row in set (0.00 sec)

mysql> CALL sys.table_exists('db1', 't3', @exists); SELECT @exists;
Query OK, 0 rows affected (0.00 sec)

+---------+
| @exists |
+---------+
|         |
+---------+
1 row in set (0.00 sec)