เมื่อคอลัมน์ DATE ถูกสร้างเป็น NOT NULL ต้องใช้ ALTER TABLE ... MODIFY เพื่อเปลี่ยนให้รับ NULL ได้
Syntax
alter table yourTableName modify column yourColumnName date NULL;
สร้างตาราง (NOT NULL)
mysql> create table DemoTable (
ShippingDate date NOT NULL );
Query OK, 0 rows affected (0.78 sec)
ลอง Insert NULL (Error)
mysql> insert into DemoTable values(null); ERROR 1048 (23000) : Column 'ShippingDate' cannot be null
แก้ไขโครงสร้างให้รับ NULL ได้
mysql> alter table DemoTable modify column ShippingDate date NULL; Query OK, 0 rows affected (1.81 sec) Records: 0 Duplicates: 0 Warnings: 0
Insert NULL อีกครั้ง (สำเร็จ)
mysql> insert into DemoTable values(null); Query OK, 1 row affected (1.21 sec)
ตรวจสอบผลลัพธ์
mysql> select *from DemoTable;
+--------------+ | ShippingDate | +--------------+ | NULL | +--------------+ 1 row in set (0.00 sec)
รายละเอียด ALTER TABLE MODIFY
MODIFY COLUMNเปลี่ยน Definition ของคอลัมน์เดิมCHANGE COLUMNเปลี่ยนทั้งชื่อและ Definition- ต้องระบุชนิดข้อมูลครบ (DATE, VARCHAR(50), INT ฯลฯ)
- สามารถเพิ่ม/ลบ
DEFAULT,COMMENT,NULL/NOT NULLได้ในครั้งเดียว
ตัวอย่างเพิ่มเติม
-- เปลี่ยนเป็น NOT NULL พร้อม Default ALTER TABLE DemoTable MODIFY ShippingDate DATE NOT NULL DEFAULT '2000-01-01'; -- เปลี่ยนชื่อและชนิดข้อมูล ALTER TABLE DemoTable CHANGE ShippingDate ShipDate DATETIME NULL;
ข้อควรระวัง
- การ ALTER TABLE บนตารางใหญ่ อาจ Lock ตารางนาน (ใช้
ALGORITHM=INPLACE,LOCK=NONEใน MySQL 5.6+) - ตรวจสอบ Application ว่าจัดการ NULL ได้ก่อนเปลี่ยน
- Foreign Key อาจบล็อกการเปลี่ยนแปลง