Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ตรวจสอบว่าตารางมีอยู่หรือไม่ และสร้างถ้ายังไม่มี (CREATE TABLE IF NOT EXISTS)

การสร้างตารางก็ต่อเมื่อยังไม่มีอยู่ด้วย CREATE TABLE IF NOT EXISTS

Clause IF NOT EXISTS

ตัวอย่างการใช้งาน

พยายามสร้างตารางที่มีอยู่แล้ว:

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 แยกต่างหากหากต้องการแก้ไขโครงสร้าง