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

การทำให้คอลัมน์วันที่รับค่า NULL ได้ใน MySQL ด้วย ALTER TABLE

เมื่อคอลัมน์ 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 อาจบล็อกการเปลี่ยนแปลง