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

เหตุใดจึงไม่ควรเพิ่ม MySQL ไม่ใช่ NULL ลงในฟิลด์คีย์หลัก


คุณไม่จำเป็นต้องเพิ่ม NOT NULL ลงในฟิลด์คีย์หลักเพราะจะได้รับ NOT NULL โดยอัตโนมัติ คีย์หลักคือการรวมกันของทั้งคีย์ที่ไม่เป็นค่าว่างและคีย์ที่ไม่ซ้ำ

นี่คือตัวอย่างฟิลด์คีย์หลัก ให้เราสร้างตารางก่อน แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง NotNullAddDemo -> ( -> Id int AUTO_INCREMENT, -> PRIMARY KEY(Id) -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.81 วินาที)

ในตารางด้านบน คุณไม่จำเป็นต้องเพิ่ม NOT NULL ให้กับฟิลด์คีย์หลัก เนื่องจาก MySQL จะแปลงเป็น NOT NULL ภายใน หากต้องการตรวจสอบว่าถูกต้องหรือไม่ ให้ใช้ไวยากรณ์ต่อไปนี้

DESC yourTableName;

ให้เราตรวจสอบไวยากรณ์ด้านบนเพื่อรับคำอธิบายตาราง:

mysql> อธิบาย NotNullAddDemo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+-------+---------+------+ -----+---------+ ----- ----+| สนาม | พิมพ์ | Null | คีย์ | ค่าเริ่มต้น | พิเศษ |+-------+---------+------+----+---------+------ ----+| รหัส | int(11) | ไม่ | PRI | NULL | auto_increment |+-------+---------+------+ -----+---------+------ ----------+1 แถวในชุด (0.07 วินาที)

ดูคอลัมน์ Null มีค่า NO ซึ่งหมายความว่าไม่มีค่า NULL

ในการตรวจสอบ NOT NULL ให้เราแทรกระเบียน NULL ลงในตาราง ซึ่งจะทำให้มีค่า NULL แต่ทุกครั้งที่นับค่าจาก 1 แบบสอบถามเพื่อแทรกระเบียนในตาราง

mysql> แทรกลงในค่า NotNullAddDemo (NULL) แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.12 วินาที) mysql> แทรกลงในค่า NotNullAddDemo (NULL) แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.45 วินาที)

หลังจากแทรกค่า NULL สองค่าสำหรับคีย์หลัก หากคุณพยายามแทรกค่า 1 จะเกิดข้อผิดพลาดขึ้น เนื่องจาก MySQL นับค่า NULL แรกเป็น 1 และค่า NULL ที่สองเป็น 2 เป็นต้น

ข้อผิดพลาดมีดังนี้หากคุณจะพยายามแทรก 1:

mysql> แทรกลงในค่า NotNullAddDemo(1);ERROR 1062 (23000):รายการซ้ำ '1' สำหรับคีย์ 'PRIMARY'

หากคุณใส่ค่า 3 ก็จะยอมรับ:

mysql> แทรกลงในค่า NotNullAddDemo (3) ตกลง แบบสอบถาม 1 แถวได้รับผลกระทบ (0.21 วินาที) mysql> แทรกลงในค่า NotNullAddDemo (NULL) แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.18 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก NotNullAddDemo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+| รหัส |+---+| 1 || 2 || 3 || 4 |+----+4 แถวในชุด (0.00 วินาที)