MySQL 9.0 发行说明
测试给定表是否存在,可以是常规表、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)