Giải pháp: CREATE TABLE IF NOT EXISTS
Tạo bảng chỉ khi chưa tồn tại, trả về warning nếu đã có.
Ví dụ minh họa
Tạo bảng lần 1
mysql> CREATE TABLE IF NOT EXISTS DemoTable (Id INT); Query OK, 0 rows affected (0.71 sec)
Tạo lại bảng đã tồn tại
mysql> CREATE TABLE IF NOT EXISTS DemoTable (Id INT); Query OK, 0 rows affected, 1 warning (0.06 sec)
Xem warning
mysql> SHOW WARNINGS; +-------+------+-------------------------------------+ | Level | Code | Message | +-------+------+-------------------------------------+ | Note | 1050 | Table 'DemoTable' already exists | +-------+------+-------------------------------------+
Các cách kiểm tra khác
1. INFORMATION_SCHEMA (Chuẩn SQL)
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'DemoTable';
2. SHOW TABLES
SHOW TABLES LIKE 'DemoTable';
3. DROP IF EXISTS + CREATE (Reset bảng)
DROP TABLE IF EXISTS DemoTable; CREATE TABLE DemoTable (Id INT);
Ứng dụng thực tế: Migration/Deployment
-- Tạo bảng nếu chưa có
CREATE TABLE IF NOT EXISTS users (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Thêm cột nếu chưa có (MySQL 8.0+)
ALTER TABLE users ADD COLUMN IF NOT EXISTS phone VARCHAR(20);
Lưu ý
IF NOT EXISTSchỉ kiểm tra tên bảng, không kiểm tra cấu trúc- Nếu bảng tồn tại nhưng schema khác → không báo lỗi, không thay đổi
- Warning level =
Note(không phải Error) - Dùng
SHOW WARNINGSngay sau câu lệnh để xem
Kiểm tra và tạo index nếu chưa có (MySQL 8.0+)
-- Không có cú pháp IF NOT EXISTS cho INDEX -- Cần kiểm tra thủ tục: SELECT COUNT(*) INTO @idx_exists FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'users' AND INDEX_NAME = 'idx_email'; SET @sql = IF(@idx_exists = 0, 'CREATE INDEX idx_email ON users(email)', 'SELECT "Index exists"'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;