檢查表是否存在於 MySQL 中

Subhan Hagverdiyev 2023年1月30日
  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