MySQL AUTO_INCREMENT พร้อมตัวอย่าง

การเพิ่มอัตโนมัติคืออะไร?

Auto Increment คือฟังก์ชันที่ดำเนินการกับประเภทข้อมูลตัวเลข โดยจะสร้างค่าตัวเลขตามลำดับโดยอัตโนมัติทุกครั้งที่มีการแทรกเรกคอร์ดลงในตารางสำหรับฟิลด์ที่กำหนดให้เป็นการเพิ่มอัตโนมัติ

เมื่อใช้การเพิ่มขึ้นอัตโนมัติ?

ในบทเรียนเกี่ยวกับการทำให้ฐานข้อมูลเป็นมาตรฐาน เราได้ศึกษาวิธีการจัดเก็บข้อมูลโดยมีความซ้ำซ้อนน้อยที่สุด โดยการจัดเก็บข้อมูลลงในตารางเล็กๆ จำนวนมาก ซึ่งสัมพันธ์กันโดยใช้คีย์หลักและคีย์ต่างประเทศ

MySQL 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 ผลลัพธ์แสดงไว้ด้านล่าง

MySQL AUTO_INCREMENT

สรุป

  • คุณสมบัติการเพิ่มอัตโนมัติเมื่อระบุในคอลัมน์ที่มีชนิดข้อมูลตัวเลข จะสร้างตัวเลขตามลำดับทุกครั้งที่มีการเพิ่มแถวใหม่ลงในฐานข้อมูล
  • การเพิ่มขึ้นอัตโนมัติมักใช้เพื่อสร้างคีย์หลัก
  • ชนิดข้อมูลที่กำหนดไว้ในการเพิ่มอัตโนมัติควรมีขนาดใหญ่พอที่จะรองรับหลายเรกคอร์ด การกำหนด TINYINT เป็นชนิดข้อมูลสำหรับฟิลด์การเพิ่มอัตโนมัติจะจำกัดจำนวนระเบียนที่สามารถเพิ่มลงในตารางได้เพียง 255 เท่านั้น เนื่องจากค่าใดๆ ที่นอกเหนือจากนั้นจะไม่ได้รับการยอมรับจากชนิดข้อมูล TINYINT
  • ถือเป็นแนวทางปฏิบัติที่ดีในการระบุข้อจำกัดที่ไม่ได้ลงนามในการเพิ่มคีย์หลักอัตโนมัติเพื่อหลีกเลี่ยงการมีตัวเลขติดลบ
  • เมื่อแถวถูกลบออกจากตาราง รหัสที่เพิ่มขึ้นอัตโนมัติจะไม่ถูกนำมาใช้ซ้ำ MySQL ยังคงสร้างตัวเลขใหม่ขึ้นมาอย่างต่อเนื่อง
  • ตามค่าเริ่มต้น ค่าเริ่มต้นสำหรับ AUTO_INCREMENT คือ 1 และจะเพิ่มขึ้น 1 สำหรับแต่ละระเบียนใหม่
  • หากต้องการให้ลำดับ AUTO_INCREMENT เริ่มต้นด้วยค่าอื่น ให้ใช้ AUTO_INCREMENT = 10