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

ตรวจสอบคอลัมน์เป็น NULL หรือค่า Default ใน MySQL ด้วย IFNULL

เมื่อต้องการแยกแยะว่า ค่าในคอลัมน์เป็น NULL จริง หรือเป็น ค่า Default ของตาราง ให้ใช้ IFNULL() ร่วมกับ DEFAULT() ฟังก์ชัน

สร้างตารางมี Default Value

mysql> create table DemoTable (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(100) DEFAULT 'Larry',
    Age int DEFAULT NULL
);

เพิ่มข้อมูลทดสอบ

mysql> insert into DemoTable(Name,Age) values('John',23);   -- ระบุทั้งคู่
mysql> insert into DemoTable values();                        -- ใช้ Default ทั้งคู่
mysql> insert into DemoTable(Name) values('David');           -- Name=David, Age=Default NULL
mysql> insert into DemoTable(Age) values(24);                 -- Name=Default Larry, Age=24

ข้อมูลในตาราง

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
| 1  | John  | 23   |
| 2  | Larry | NULL |
| 3  | David | NULL |
| 4  | Larry | 24   |
+----+-------+------+

คำสั่ง: ดึงเฉพาะแถวที่ Name ไม่ใช่ Default (คือ John และ David)

mysql> select * from DemoTable 
WHERE IFNULL(Name, DEFAULT(Name)) <> DEFAULT(Name);

ผลลัพธ์

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
| 1  | John  | 23   |
| 3  | David | NULL |
+----+-------+------+

คำอธิบายตรรกะ

  • DEFAULT(Name) คืนค่า 'Larry' (ค่า Default ของคอลัมน์)
  • IFNULL(Name, DEFAULT(Name)) - ถ้า Name เป็น NULL ใช้ Default แทน
  • <> DEFAULT(Name) - เปรียบเทียบว่าต่างจาก Default จริงหรือไม่
แถวName จริงIFNULL(Name, Default)Default(Name)ต่างจาก Default?
1JohnJohnLarry✅ ใช่
2NULLLarryLarry❌ ไม่ (เป็น Default)
3DavidDavidLarry✅ ใช่
4Larry (Default)LarryLarry❌ ไม่ (เป็น Default)

กรณีใช้งาน

  • Audit Trail - ตรวจสอบฟิลด์ที่ผู้ใช้กรอกจริง vs Default
  • Data Quality - หาข้อมูลที่ยังไม่ได้กรอก (ยังเป็น Default)
  • Migration - ระบุคอลัมน์ที่ต้องการอัปเดต

ฟังก์ชัน DEFAULT()

  • ทำงานได้ใน: SELECT, WHERE, ORDER BY, DEFAULT() ใน VALUES() ของ INSERT
  • ไม่ทำงานใน: Trigger body (บางเวอร์ชัน), Prepared Statement บางรูปแบบ