检查表是否存在于 MySQL 中
- MySQL 中的表是什么
- 使用信息模式检查 MySQL 中是否存在表
-
使用
SHOW TABLES
命令检查表是否存在于 MySQL -
使用
table_exists()
程序检查表是否存在于 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 is a professional back-end developer as well as mobile developer. He is also open-source contributor by writing articles.
LinkedIn