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

เพิ่ม NOT NULL Constraint ให้คอลัมน์ที่มีอยู่แล้วใน MySQL

ใช้ ALTER TABLE ... MODIFY COLUMN เพื่อเพิ่ม NOT NULL Constraint ให้คอลัมน์ที่มีอยู่แล้ว

Syntax

ALTER TABLE table_name 
MODIFY COLUMN column_name data_type NOT NULL;

ตัวอย่าง

CREATE TABLE AddNotNUlldemo (
    name VARCHAR(100)
);

INSERT INTO AddNotNUlldemo VALUES ('John'), ('Bob');

-- เพิ่ม NOT NULL Constraint
ALTER TABLE AddNotNUlldemo 
MODIFY COLUMN name VARCHAR(100) NOT NULL;
-- Query OK, 0 rows affected (1.14 sec)

ทดสอบ Constraint

INSERT INTO AddNotNUlldemo VALUES (NULL);
-- ERROR 1048 (23000): Column 'name' cannot be null

SELECT * FROM AddNotNUlldemo;
+------+
| name |
+------+
| John |
| Bob  |
+------+

⚠️ ข้อควรระวังสำคัญ

1. ต้องไม่มีข้อมูล NULL อยู่แล้ว

-- ถ้ามี NULL อยู่แล้ว จะ Error
ALTER TABLE t MODIFY col INT NOT NULL;
-- ERROR 1048: Column 'col' cannot be null (ถ้ามี NULL ในข้อมูล)

แก้ไข: Update NULL → Default Value ก่อน

UPDATE t SET col = 0 WHERE col IS NULL;
ALTER TABLE t MODIFY col INT NOT NULL;

2. ต้องระบุ Data Type ให้ครบ

-- ❌ ผิด: ไม่ระบุ Type
ALTER TABLE t MODIFY col NOT NULL;

-- ✅ ถูก: ระบุ Type ครบ
ALTER TABLE t MODIFY col VARCHAR(100) NOT NULL;

3. ใช้ CHANGE COLUMN ถ้าอยากเปลี่ยนชื่อพร้อมกัน

ALTER TABLE t CHANGE COLUMN old_name new_name VARCHAR(100) NOT NULL;

ลบ NOT NULL Constraint

ALTER TABLE table_name 
MODIFY COLUMN column_name data_type NULL;

ตรวจสอบ Constraint

SHOW CREATE TABLE AddNotNUlldemo;
-- หรือ
DESC AddNotNUlldemo;
-- Null = NO หมายถึง NOT NULL

Best Practice

  • ✅ ตั้ง NOT NULL DEFAULT 'default_value' ตอน CREATE TABLE
  • ✅ Validate Data ก่อน ALTER (Check NULL Count)
  • ✅ ใช้ Transaction หาก Critical
  • ⚠️ Lock Table ระหว่าง ALTER (InnoDB: Online DDL รองรับบาง Operation)