检查表是否存在于 MySQL 中

Subhan Hagverdiyev 2023年1月30日 2022年5月13日
  1. MySQL 中的表是什么
  2. 使用信息模式检查 MySQL 中是否存在表
  3. 使用 SHOW TABLES 命令检查表是否存在于 MySQL
  4. 使用 table_exists() 程序检查表是否存在于 MySQL
检查表是否存在于 MySQL 中

本文提供了几个选项来检查 MySQL 中的表是否存在。在讨论它之前,让我们先看看 MySQL 中的表是什么,以及何时需要检查它的存在。

MySQL 中的表是什么

表是保存所有数据库信息的数据库对象。表格类似于电子表格,因为数据以行和列的方式在逻辑上结构化。

每列显示记录中的一个字段,每一行代表一条不同的记录。我们可以通过简单地调用 create 语句在 MySQL 中创建一个表。

CREATE TABLE table_name (table_id INT);

我们可以执行 drop 语句来永久删除一个表。

DROP TABLE table_name;

有时,当我们想将表部署到数据库时,我们需要确认该表具有唯一的名称,否则,CREATE TABLE 语句会出错。

在另一种情况下,如果我们删除一个不存在的表,我们将再次收到错误。解决方法很简单;我们需要检查一个表是否存在并执行我们想要的操作。

使用信息模式检查 MySQL 中是否存在表

检查表是否存在的一种方法是查询 INFORMATION_SCHEMA.TABLES 视图。为此,我们可以从 INFORMATION_SCHEMA.TABLES 中获取与我们的表同名的表的数量。

CREATE TABLE table_name (table_id INT);
SELECT count(*)
FROM information_schema.TABLES
WHERE TABLE_NAME = 'table_name';

输出:

+----------+
| count(*) |
+----------+
|        1 |
+----------+

如果我们得到零,那么我们的数据库中就没有这样的表,如果我们得到一个非零数,那么这个表就存在。如果你有多个数据库,你可以在 WHERE 语句中检查 TABLE_SCHEMA = 'database_name'

如果你不知道数据库,你可以用 SELECT DATABASE() 查询它。上面带有数据库的代码的修订版本如下。

CREATE TABLE EMPLOYEE (table_id INT);
SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = 'EMPLOYEE'
AND TABLE_SCHEMA in (SELECT DATABASE());

输出:

+----------+
| count(*) |
+----------+
|        1 |
+----------+

使用 SHOW TABLES 命令检查表是否存在于 MySQL

第二种方法也很简单,就是使用 SHOW TABLES。让我们在数据库中创建一个表 sampletable 并检查它是否存在。

CREATE TABLE sampletable (myId INT);
SHOW TABLES LIKE 'sampletable';

输出:

Tables_in_db_3xs4qrcrf (sampletable)
sampletable

如果没有任何表,你可能会得到零行。你需要知道此方法不适用于临时表。

MySQL 中的临时表是一种特殊类型的表,可让你保存一个临时结果集,你可以在单个会话中多次重复使用该结果集。

当查询需要带有 JOIN 子句的单个 SELECT 语句的数据很困难或成本很高时,临时表很有用。

在这种情况下,你可以将即时结果保存在临时表中并使用另一个查询对其进行处理。我们将在下一个方法中讨论适用于临时表的方法。

使用 table_exists() 程序检查表是否存在于 MySQL

MySQL 5.7 之后添加了新的方法来确定表或视图是否存在,包括临时表。在说这个程序之前,我们首先要掌握这个程序。

过程是传统脚本语言中的数据库存储子例程(类似于子程序)。在 MySQL 的情况下,过程是用 MySQL 编写的,并保存在 MySQL 数据库/服务器中。

MySQL 进程包含三个部分:名称、参数列表和 SQL 查询。现在我们可以继续我们的特定过程 table_exists

根据 MySQL 文档:该过程在 OUT 参数中返回表类型。如果具有给定名称的临时表和永久表都存在,则返回 TEMPORARY

让我们检查一下。

CREATE TABLE mytable (id INT PRIMARY KEY);
CALL sys.table_exists('mydatabase', 'mytable', @exists); SELECT @exists;

输出:

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

如果数据库中没有这样的表,你将得到一个空结果。

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

Subhan is a professional back-end developer as well as mobile developer. He is also open-source contributor by writing articles.

LinkedIn

相关文章 - MySQL Table