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

เพิ่ม Constraint NOT NULL ให้คอลัมน์ที่สร้างแล้วใน MySQL ด้วย ALTER TABLE

บทนำ

หากสร้างตารางโดยไม่ได้ตั้งค่า NOT NULL ให้คอลัมน์ สามารถเพิ่ม Constraint นี้ภายหลังได้ด้วยคำสั่ง ALTER TABLE ... MODIFY

ตัวอย่างการสร้างตาราง (StudentName ยังไม่ NOT NULL)

mysql> CREATE TABLE DemoTable (
    -> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.86 sec)

ตรวจสอบโครงสร้างก่อน ALTER

mysql> DESC DemoTable;

ผลลัพธ์

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| StudentId   | int(11)      | NO   | PRI | NULL    | auto_increment |
| StudentName | varchar(100) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

สังเกต: StudentName มี Null = YES

คำสั่งเพิ่ม NOT NULL Constraint

mysql> ALTER TABLE DemoTable 
    -> MODIFY StudentName VARCHAR(100) NOT NULL;
Query OK, 0 rows affected (1.57 sec)
Records: 0  Duplicates: 0  Warnings: 0

ตรวจสอบโครงสร้างหลัง ALTER

mysql> DESC DemoTable;

ผลลัพธ์

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| StudentId   | int(11)      | NO   | PRI | NULL    | auto_increment |
| StudentName | varchar(100) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

ตอนนี้ StudentName มี Null = NO แล้ว

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

  • ต้องไม่มีข้อมูล NULL อยู่ในคอลัมน์นั้นแล้ว มิฉะนั้น ALTER จะล้มเหลว
  • ต้องระบุชนิดข้อมูล (Data Type) ให้ครบถ้วนเหมือนเดิม (VARCHAR(100) NOT NULL)
  • ใช้ MODIFY สำหรับเปลี่ยน Definition, CHANGE สำหรับเปลี่ยนชื่อ + Definition

ตรวจสอบข้อมูล NULL ก่อน ALTER

SELECT * FROM DemoTable WHERE StudentName IS NULL;
-- หากมีผลลัพธ์ ต้อง UPDATE ให้มีค่าก่อน
UPDATE DemoTable SET StudentName = 'Unknown' WHERE StudentName IS NULL;

คำสั่ง MODIFY อื่นๆ ที่ใช้บ่อย

-- เปลี่ยนชนิดข้อมูล
ALTER TABLE DemoTable MODIFY StudentAge SMALLINT;

-- เปลี่ยนชนิดข้อมูล + เพิ่ม NOT NULL + DEFAULT
ALTER TABLE DemoTable MODIFY StudentAge SMALLINT NOT NULL DEFAULT 0;

-- เปลี่ยนชื่อคอลัมน์ + ชนิดข้อมูล
ALTER TABLE DemoTable CHANGE StudentName FullName VARCHAR(100) NOT NULL;