MySQL AUTO_INCREMENT พร้อมตัวอย่าง
การเพิ่มอัตโนมัติคืออะไร?
Auto Increment คือฟังก์ชันที่ดำเนินการกับประเภทข้อมูลตัวเลข โดยจะสร้างค่าตัวเลขตามลำดับโดยอัตโนมัติทุกครั้งที่มีการแทรกเรกคอร์ดลงในตารางสำหรับฟิลด์ที่กำหนดให้เป็นการเพิ่มอัตโนมัติ
เมื่อใช้การเพิ่มขึ้นอัตโนมัติ?
ในบทเรียนเกี่ยวกับการทำให้ฐานข้อมูลเป็นมาตรฐาน เราได้ศึกษาวิธีการจัดเก็บข้อมูลโดยมีความซ้ำซ้อนน้อยที่สุด โดยการจัดเก็บข้อมูลลงในตารางเล็กๆ จำนวนมาก ซึ่งสัมพันธ์กันโดยใช้คีย์หลักและคีย์ต่างประเทศ
คีย์หลักจะต้องไม่ซ้ำกันเนื่องจากคีย์หลักจะระบุแถวในฐานข้อมูลได้โดยไม่ซ้ำกัน แต่เราจะมั่นใจได้อย่างไรว่าคีย์หลักจะไม่ซ้ำกันเสมอ วิธีแก้ปัญหาที่เป็นไปได้วิธีหนึ่งคือใช้สูตรเพื่อสร้างคีย์หลักซึ่งจะตรวจสอบการมีอยู่ของคีย์ในตารางก่อนจะเพิ่มข้อมูล วิธีนี้อาจได้ผลดี แต่จะเห็นได้ว่าวิธีนี้มีความซับซ้อนและไม่ใช่แนวทางที่ได้ผลเสมอไป เพื่อหลีกเลี่ยงความซับซ้อนดังกล่าวและเพื่อให้แน่ใจว่าคีย์หลักจะไม่ซ้ำกันเสมอ เราสามารถใช้ MySQLคุณลักษณะการเพิ่มอัตโนมัติของ 's เพื่อสร้างคีย์หลัก การเพิ่มอัตโนมัติใช้กับประเภทข้อมูล INT ประเภทข้อมูล INT รองรับทั้งค่าที่มีเครื่องหมายและไม่มีเครื่องหมาย ประเภทข้อมูลที่ไม่มีเครื่องหมายสามารถมีได้เฉพาะจำนวนบวกเท่านั้น แนวทางปฏิบัติที่ดีที่สุดคือ ขอแนะนำให้กำหนดข้อจำกัดที่ไม่มีเครื่องหมายบนคีย์หลักการเพิ่มอัตโนมัติ
ไวยากรณ์การเพิ่มขึ้นอัตโนมัติ
ตอนนี้เรามาดูสคริปต์ที่ใช้สร้างตารางหมวดหมู่ภาพยนตร์กัน
CREATE TABLE `categories` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`) );
สังเกต “AUTO_INCREMENT” ในฟิลด์ category_id ซึ่งจะทำให้รหัสหมวดหมู่ถูกสร้างขึ้นโดยอัตโนมัติทุกครั้งที่มีการแทรกแถวใหม่ลงในตาราง ไม่ได้ระบุไว้เมื่อใส่ข้อมูลลงในตาราง MySQL สร้างมันขึ้นมา
ตามค่าเริ่มต้น ค่าเริ่มต้นสำหรับ AUTO_INCREMENT คือ 1 และจะเพิ่มขึ้น 1 สำหรับแต่ละระเบียนใหม่
เรามาตรวจสอบเนื้อหาปัจจุบันของตารางหมวดหมู่กัน
SELECT * FROM `categories`;
ดำเนินการสคริปต์ข้างต้นใน MySQL การใช้งาน workbench กับ myflixdb จะให้ผลลัพธ์ดังต่อไปนี้
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
ตอนนี้เรามาแทรกหมวดหมู่ใหม่ลงในตารางหมวดหมู่
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
ดำเนินการสคริปต์ข้างต้นกับ myflixdb ใน MySQL ปรับแต่ง ทำให้เราได้ผลดังแสดงข้างล่างนี้
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
9 | Cartoons | NULL |
โปรดทราบว่าเราไม่ได้ระบุรหัสหมวดหมู่ MySQL สร้างให้เราโดยอัตโนมัติเนื่องจากรหัสหมวดหมู่ถูกกำหนดให้เป็นการเพิ่มขึ้นอัตโนมัติ
หากคุณต้องการรับรหัสแทรกล่าสุดที่สร้างขึ้นโดย MySQLคุณสามารถใช้ฟังก์ชัน LAST_INSERT_ID เพื่อดำเนินการดังกล่าวได้ สคริปต์ที่แสดงด้านล่างได้รับรหัสล่าสุดที่สร้างขึ้น
SELECT LAST_INSERT_ID();
การดำเนินการสคริปต์ด้านบนจะให้หมายเลขเพิ่มอัตโนมัติล่าสุดที่สร้างโดยแบบสอบถาม INSERT ผลลัพธ์แสดงไว้ด้านล่าง
สรุป
- คุณสมบัติการเพิ่มอัตโนมัติเมื่อระบุในคอลัมน์ที่มีชนิดข้อมูลตัวเลข จะสร้างตัวเลขตามลำดับทุกครั้งที่มีการเพิ่มแถวใหม่ลงในฐานข้อมูล
- การเพิ่มขึ้นอัตโนมัติมักใช้เพื่อสร้างคีย์หลัก
- ชนิดข้อมูลที่กำหนดไว้ในการเพิ่มอัตโนมัติควรมีขนาดใหญ่พอที่จะรองรับหลายเรกคอร์ด การกำหนด TINYINT เป็นชนิดข้อมูลสำหรับฟิลด์การเพิ่มอัตโนมัติจะจำกัดจำนวนระเบียนที่สามารถเพิ่มลงในตารางได้เพียง 255 เท่านั้น เนื่องจากค่าใดๆ ที่นอกเหนือจากนั้นจะไม่ได้รับการยอมรับจากชนิดข้อมูล TINYINT
- ถือเป็นแนวทางปฏิบัติที่ดีในการระบุข้อจำกัดที่ไม่ได้ลงนามในการเพิ่มคีย์หลักอัตโนมัติเพื่อหลีกเลี่ยงการมีตัวเลขติดลบ
- เมื่อแถวถูกลบออกจากตาราง รหัสที่เพิ่มขึ้นอัตโนมัติจะไม่ถูกนำมาใช้ซ้ำ MySQL ยังคงสร้างตัวเลขใหม่ขึ้นมาอย่างต่อเนื่อง
- ตามค่าเริ่มต้น ค่าเริ่มต้นสำหรับ AUTO_INCREMENT คือ 1 และจะเพิ่มขึ้น 1 สำหรับแต่ละระเบียนใหม่
- หากต้องการให้ลำดับ AUTO_INCREMENT เริ่มต้นด้วยค่าอื่น ให้ใช้ AUTO_INCREMENT = 10