คำตอบ: ส่ง NULL ได้ และ MySQL จะสร้างค่าใหม่ให้อัตโนมัติ
แม้คอลัมน์จะเป็น NOT NULL AUTO_INCREMENT PRIMARY KEY ก็สามารถส่ง NULL ในคำสั่ง INSERT ได้ MySQL จะข้ามค่า NULL และสร้าง Sequence ใหม่ให้
สร้างตาราง
mysql> CREATE TABLE DemoTable1503 (
-> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName VARCHAR(20),
-> ClientAge INT
-> );
Query OK, 0 rows affected (0.45 sec)
INSERT ด้วย NULL สำหรับ ClientId
mysql> INSERT INTO DemoTable1503 VALUES(NULL, 'Chris', 25); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable1503 VALUES(NULL, 'David', 28); Query OK, 1 row affected (0.37 sec) mysql> INSERT INTO DemoTable1503 VALUES(NULL, 'Bob', 45); Query OK, 1 row affected (0.09 sec) mysql> INSERT INTO DemoTable1503 VALUES(NULL, 'Mike', 57); Query OK, 1 row affected (0.15 sec)
ผลลัพธ์: ClientId ถูกสร้างอัตโนมัติ 1,2,3,4
+----------+------------+-----------+ | ClientId | ClientName | ClientAge | +----------+------------+-----------+ | 1 | Chris | 25 | | 2 | David | 28 | | 3 | Bob | 45 | | 4 | Mike | 57 | +----------+-----------+
วิธี INSERT อื่นๆ ที่เทียบเท่า
| วิธี | ตัวอย่าง | หมายเหตุ |
|---|---|---|
| ส่ง NULL | INSERT INTO t VALUES(NULL, 'A') | ชัดเจน 易读 |
| ส่ง 0 | INSERT INTO t VALUES(0, 'A') | MySQL แปลง 0 เป็น Next Sequence |
| ใช้ DEFAULT | INSERT INTO t VALUES(DEFAULT, 'A') | Explicit, แนะนำสำหรับ Code Clarity |
| ไม่ระบุคอลัมน์ | INSERT INTO t(col2) VALUES('A') | Best Practice - ระบุชื่อคอลัมน์ชัดเจน |