檢查表是否存在於 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