การสร้างตารางก็ต่อเมื่อยังไม่มีอยู่ด้วย CREATE TABLE IF NOT EXISTS
Clause IF NOT EXISTS้องกัน Error ตอนสร้างตารางซ้ำ โดยจะส่ง Warning แทน (ไม่หยุดการทำงาน)
ตัวอย่างการใช้งาน
พยายามสร้างตารางที่มีอยู่แล้ว:
mysql> CREATE TABLE IF NOT EXISTS DemoTable (
-> CustomerId INT,
-> CustomerName VARCHAR(30),
-> CustomerAge INT
-> );
Query OK, 0 rows affected, 1 warning (0.05 sec)
ดู Warning:
mysql> SHOW WARNINGS;
+-------+------+------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------+
| Note | 1050 | Table 'demotable' already exists |
+-------+------+------------------------------------+
1 row in set (0.00 sec)
สร้างตารางใหม่ที่ยังไม่มี (สำเร็จไม่มี Warning):
mysql> CREATE TABLE IF NOT EXISTS DemoTable2 (
-> CustomerId INT,
-> CustomerName VARCHAR(20),
-> CustomerAge INT
-> );
Query OK, 0 rows affected (0.56 sec)
เพิ่มข้อมูลและตรวจสอบ:
mysql> INSERT INTO DemoTable2 VALUES(101, 'Chris', 23), (102, 'Robert', 24);
Query OK, 2 rows affected (0.12 sec)
mysql> SELECT * FROM DemoTable2;
+------------+--------------+-------------+
| CustomerId | CustomerName | CustomerAge |
+------------+--------------+-------------+
| 101 | Chris | 23 |
| 102 | Robert | 24 |
+------------+--------------+-------------+
2 rows in set (0.00 sec)
คำอธิบาย
IF NOT EXISTSทำให้ Statement เป็น Idempotent (รันซ้ำได้ไม่ Error)- เหมาะสำหรับ Migration Script, Setup Script, CI/CD Pipeline
- คืนค่า
Query OK, 0 rows affected, 1 warningถ้าตารางมีอยู่แล้ว - คืนค่า
Query OK, 0 rows affected(ไม่มี Warning) ถ้าสร้างใหม่สำเร็จ
คำสั่งที่เกี่ยวข้อง
-- ลบทิ้งถ้ามี แล้วสร้างใหม่ (ระวัง Data Loss!)
DROP TABLE IF EXISTS DemoTable;
CREATE TABLE DemoTable (...);
-- ตรวจสอบตารางมีอยู่จริง
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name';
ข้อจำกัด
- ไม่ตรวจสอบโครงสร้าง (Columns, Indexes, Constraints) ถ้าตารางมีอยู่แล้วแตโครงสร้างต่างกัน จะไม่ Error และไม่ปรับโครงสร้าง
- ต้องใช้
ALTER TABLEแยกต่างหากหากต้องการแก้ไขโครงสร้าง