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

ส่งค่า NULL ให้คอลัมน์ AUTO_INCREMENT ใน MySQL ได้หรือไม่?

คำตอบ: ส่ง 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 อื่นๆ ที่เทียบเท่า

⚠️ ข้อควรระวัง

  • หาก NO_AUTO_VALUE_ON_ZERO SQL Mode เปิดอยู่ การส่ง 0 จะเก็บ 0 จริงๆ (ไม่ได้ Auto Generate)
  • ควรใช้ INSERT INTO table(col1, col2) VALUES(val1, val2) ระบุชื่อคอลัมน์เสมอ
  • LAST_INSERT_ID() จะคืนค่า ID ที่สร้างล่าสุด (ต่อ Connection)

ตัวอย่าง LAST_INSERT_ID()

mysql> INSERT INTO DemoTable1503 VALUES(NULL, 'New', 30);
Query OK, 1 row affected

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                5 |
+------------------+
วิธีตัวอย่างหมายเหตุ
ส่ง NULLINSERT INTO t VALUES(NULL, 'A')ชัดเจน 易读
ส่ง 0INSERT INTO t VALUES(0, 'A')MySQL แปลง 0 เป็น Next Sequence
ใช้ DEFAULTINSERT INTO t VALUES(DEFAULT, 'A')Explicit, แนะนำสำหรับ Code Clarity
ไม่ระบุคอลัมน์INSERT INTO t(col2) VALUES('A')Best Practice - ระบุชื่อคอลัมน์ชัดเจน