检查表是否存在于 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)
相关文章
使用 Mysqldump 备份 MySQL 中的数据
发布时间:2023/05/09 浏览次数:192 分类:MySQL
-
本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。
更新 MySQL 表中的主键
发布时间:2023/05/09 浏览次数:61 分类:MySQL
-
本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。
在 MySQL 中获取命令历史记录
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
使用 Ubuntu 连接远程 MySQL 服务器的不同方法
发布时间:2023/05/09 浏览次数:97 分类:MySQL
-
在本文中我们将学习如何使用 Ubuntu 连接远程 MySQL 服务器来操作数据以及启动和停止 MySQL 服务器。
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 MySQL 中转换为十进制
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。
在 MySQL 中获取当前日期和时间
发布时间:2023/05/09 浏览次数:145 分类:MySQL
-
本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间
更改 MySQL 服务器中的 max_allowed_packet Size
发布时间:2023/05/09 浏览次数:142 分类:MySQL
-
本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。