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

กำหนด NOT NULL Constraint สำหรับคอลัมน์ที่ห้ามว่างใน MySQL

สร้างตารางด้วย NOT NULL

mysql> CREATE TABLE DemoTable1895 (
    Id INT NOT NULL,
    FirstName VARCHAR(20),
    LastName VARCHAR(20) NOT NULL
);

ทดสอบ Insert

mysql> INSERT INTO DemoTable1895 VALUES(100, 'John', 'Smith');     -- OK
mysql> INSERT INTO DemoTable1895 VALUES(NULL, 'Chris', 'Brown');  -- ERROR 1048: Id cannot be null
mysql> INSERT INTO DemoTable1895 VALUES(102, 'Carol', NULL);      -- ERROR 1048: LastName cannot be null
mysql> INSERT INTO DemoTable1895 VALUES(103, NULL, 'Miller');    -- OK (FirstName ยอม NULL)

ผลลัพธ์

mysql> SELECT * FROM DemoTable1895;
+-----+-----------+----------+
| Id  | FirstName | LastName |
+-----+-----------+----------+
| 100 | John      | Smith    |
| 103 | NULL      | Miller   |
+-----+-----------+----------+

NOT NULL Constraint

  • บังคับให้คอลัมน์ ต้องมีค่า (ไม่ยอม NULL)
  • Error 1048 (23000) ถ้า Insert/Update เป็น NULL
  • Primary Key → NOT NULL อัตโนมัติ

ALTER TABLE เพิ่ม/ลบ NOT NULL

-- เพิ่ม NOT NULL (ต้องไม่มี NULL อยู่แล้ว)
ALTER TABLE DemoTable1895 MODIFY FirstName VARCHAR(20) NOT NULL;

-- ลบ NOT NULL
ALTER TABLE DemoTable1895 MODIFY FirstName VARCHAR(20) NULL;

NOT NULL vs Default Value

-- NOT NULL + Default: ต้องมีค่า แต่มีค่าเริ่มต้น
CREATE TABLE t (name VARCHAR(20) NOT NULL DEFAULT 'Anonymous');

-- NULL + Default: ยอม NULL ได้ แต่ Default เมื่อไม่ระบุ
CREATE TABLE t (name VARCHAR(20) DEFAULT 'Anonymous');

Best Practices

  • Default: ทุกคอลัมน์ควรเป็น NOT NULL เว้นแต่มีเหตุผลชัดเจน
  • ใช้ DEFAULT ร่วมกับ NOT NULL ลด Burden ตอน Insert
  • Application Layer ควร Validate ก่อนส่ง INSERT
  • Foreign Key Columns: ควรเป็น NOT NULL (ยกเว้น Optional Relationship)

CHECK Constraint (MySQL 8.0.16+)

CREATE TABLE t (
    age INT NOT NULL,
    CONSTRAINT chk_age CHECK (age >= 0 AND age <= 150)
);