เมื่อฉันทำแถวเดียวINSERT
ไปยังตารางที่มีAUTO_INCREMENT
คอลัมน์ฉันต้องการใช้LAST_INSERT_ID()
ฟังก์ชันเพื่อส่งกลับAUTO_INCREMENT
ค่า ed ' ใหม่ที่เก็บไว้สำหรับแถวนั้น
Microsoft SQL Server และผู้ดูแลระบบหลายคนนั้นไม่ต้องสงสัยเลยว่าทราบถึงหน้าที่การใช้งานที่เทียบเท่าใน SQL Server ( SCOPE_IDENTITY
และ@@IDENTITY
) ที่ไม่เคยมีปัญหามาก่อน
ฉันรู้สถานะของเอกสาร MySQL:
ID ที่ถูกสร้างขึ้นจะถูกเก็บไว้ในเซิร์ฟเวอร์ในแต่ละการเชื่อมต่อพื้นฐาน ซึ่งหมายความว่าค่าที่ส่งคืนโดยฟังก์ชันไปยังไคลเอนต์ที่กำหนดเป็น
AUTO_INCREMENT
ค่าแรกที่สร้างขึ้นสำหรับคำสั่งล่าสุดที่มีผลต่อAUTO_INCREMENT
คอลัมน์โดยไคลเอ็นต์นั้น ค่านี้ไม่สามารถรับผลกระทบจากไคลเอนต์อื่นแม้ว่าพวกเขาสร้างAUTO_INCREMENT
ค่าของตนเอง พฤติกรรมนี้ทำให้มั่นใจได้ว่าลูกค้าแต่ละคนสามารถดึงข้อมูล ID ของตนเองได้โดยไม่ต้องกังวลกับกิจกรรมของลูกค้ารายอื่นและไม่จำเป็นต้องล็อคหรือทำธุรกรรม
และแม้กระทั่งไปไกลถึงจะบอกว่า:
การใช้
LAST_INSERT_ID()
และAUTO_INCREMENT
คอลัมน์พร้อมกันจากไคลเอนต์หลายคนถูกต้องสมบูรณ์
มีความเสี่ยงหรือสถานการณ์ที่ทราบที่อาจทำให้LAST_INSERT_ID()
ไม่คืนค่าที่ถูกต้องหรือไม่?
ฉันใช้ MySQL 5.5 บน CentOS 5.5 x64 และ Fedora 16 x64 และเอ็นจิ้น InnoDB
last_insert_id()
การตัดสินว่าแบบสอบถามประสบความสำเร็จหรือไม่ มันคือรหัสสุดท้ายที่แทรกหลังจากถือทั้งหมดค่าที่คุณต้องการเมื่อคุณรู้แล้วว่าคุณประสบความสำเร็จ