Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Kiểm tra bảng có tồn tại trong MySQL?

Kiểm tra sự tồn tại của bảng trong MySQL

Truy vấn INFORMATION_SCHEMA.TABLES với điều kiện TABLE_NAME và TABLE_SCHEMA.

Cú pháp

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME = 'yourTableName' AND TABLE_SCHEMA = 'yourDatabase';

Ví dụ: Kiểm tra bảng Client_information

Tạo bảng:

mysql> CREATE TABLE Client_information (Id INT, Name VARCHAR(10));
mysql> INSERT INTO Client_information VALUES (1, 'Larry'), (2, 'Mike'), (3, 'Sam');

Kiểm tra tồn tại:

mysql> SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Client_information';

Kết quả (2 hàng do bảng tồn tại trong 2 schema: sample và test):

+---------------+--------------+--------------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME         | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME         | UPDATE_TIME         | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------+--------------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+
| def           | sample       | client_information | BASE TABLE | InnoDB | 10      | Dynamic    | 4          | 4096           | 16384       | 0               | 0            | 0         | NULL           | 2019-03-11 20:02:40 | NULL                | NULL       | utf8_general_ci | NULL     |                |               |
| def           | test         | client_information | BASE TABLE | InnoDB | 10      | Dynamic    | 3          | 5461           | 16384       | 0               | 0            | 0         | NULL           | 2019-04-03 02:28:31 | 2019-04-03 02:29:00 | NULL       | utf8mb4_0900_ai_ci | NULL     |                |               |
+---------------+--------------+--------------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------------+

Các cách khác

Trong Stored Procedure

IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'my_table') THEN
    -- Bảng tồn tại
ELSE
    -- Bảng không tồn tại
END IF;

Lưu ý

  • MySQL không phân biệt chữ hoa/thường cho tên bảng trên Windows (case-insensitive)
  • Trên Linux: phân biệt chữ hoa/thường (case-sensitive)
  • Luôn chỉ định TABLE_SCHEMA để tránh nhầm lẫn cross-database
Phương phápCú phápĐặc điểm
SHOW TABLESSHOW TABLES LIKE 'table_name'Nhanh, chỉ database hiện tại
INFORMATION_SCHEMASELECT ... WHERE TABLE_NAME=...Chuẩn SQL, lọc theo schema, nhiều metadata
SHOW CREATE TABLESHOW CREATE TABLE table_nameBáo lỗi nếu không tồn tại
EXISTS (subquery)SELECT EXISTS(SELECT 1 FROM information_schema.tables WHERE ...)Trả về 1/0, dùng trong IF/CASE