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

ควรระบุคอลัมน์ที่เป็น NULL ใน INSERT MySQL หรือไม่?

INSERT โดยไม่ระบุลำดับคอลัมน์: ต้องส่งค่าครบทุกคอลัมน์ (รวม NULL)

หากไม่ระบุชื่อคอลัมน์ใน INSERT INTO table VALUES(...) ต้องส่งค่าครบทุกคอลัมน์ตามลำดับที่สร้างตาราง ใช้ NULL สำหรับคอลัมน์ที่ไม่มีค่า

สร้างตาราง (4 คอลัมน์)

mysql> CREATE TABLE DemoTable1513 (
    -> StudentId INT,
    -> StudentName VARCHAR(20),
    -> StudentAge INT,
    -> StudentCountryName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.58 sec)

INSERT โดยไม่ระบุชื่อคอลัมน์ (ส่งค่า 4 ค่า ทุกครั้ง)

mysql> INSERT INTO DemoTable1513 VALUES(NULL, 'Chris Brown', NULL, NULL);
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO DemoTable1513 VALUES(101, NULL, NULL, NULL);
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO DemoTable1513 VALUES(NULL, NULL, 23, NULL);
Query OK, 1 row affected (0.42 sec)

mysql> INSERT INTO DemoTable1513 VALUES(NULL, NULL, NULL, 'US');
Query OK, 1 row affected (0.16 sec)

ผลลัพธ์

+-----------+-------------+------------+--------------------+
| StudentId | StudentName | StudentAge | StudentCountryName |
+-----------+-------------+------------+--------------------+
| NULL      | Chris Brown | NULL       | NULL               |
| 101       | NULL        | NULL       | NULL               |
| NULL      | NULL        | 23         | NULL               |
| NULL      | NULL        | NULL       | US                 |
+-----------+-------------+------------+--------------------+

✅ แนวทางแนะนำ: ระบุชื่อคอลัมน์เสมอ (Explicit Column List)

-- ดี: ระบุเฉพาะคอลัมน์ที่มีค่า
INSERT INTO DemoTable1513(StudentName) VALUES('Chris Brown');
INSERT INTO DemoTable1513(StudentId) VALUES(101);
INSERT INTO DemoTable1513(StudentAge) VALUES(23);
INSERT INTO DemoTable1513(StudentCountryName) VALUES('US');

-- ผลลัพธ์: คอลัมน์ที่ไม่ระบุจะได้ DEFAULT (หรือ NULL ถ้าไม่มี DEFAULT)

ข้อดีของการระบุชื่อคอลัมน์

  • ความชัดเจน: รู้ชัดเจนว่าใส่ค่าอะไรเข้าไปคอลัมน์ไหน
  • ความปลอดภัย: ไม่ผิดลำดับเมื่อเพิ่ม/ลบ/ย้ายคอลัมน์ในตาราง
  • ความยืดหยุ่น: ใส่เฉพาะคอลัมน์ที่ต้องการ คอลัมน์อื่นใช้ Default/NULL เอง
  • ประสิทธิภาพ: MySQL ไม่ต้อง Validate จำนวนค่าเท่ากับจำนวนคอลัมน์ทั้งหมด

⚠️ ข้อควรระวัง

  • คอลัมน์ NOT NULL ที่ไม่มี DEFAULT ต้องระบุค่าทุกครั้ง
  • คอลัมน์ AUTO_INCREMENT ควรเว้นไว้ (หรือส่ง NULL/DEFAULT)
  • TIMESTAMP คอลัมน์แรกที่ไม่มี DEFAULT จะได้ CURRENT_TIMESTAMP อัตโนมัติ

สรุป

ควรระบุชื่อคอลัมน์เสมอ เว้นแต่กรณีพิเศษ (Bulk Load, Migration Script ที่ควบคุมโครงสร้างตารางได้เต็มที่)