سؤال MySQL سهل بخصوص المفاتيح الأساسية والإدراج

StackOverflow https://stackoverflow.com/questions/165156

  •  03-07-2019
  •  | 
  •  

سؤال

في الخلية، كيف يمكنني الحصول على المفتاح الأساسي المستخدم لعملية الإدراج، عندما يتم تزايده تلقائيًا.

في الأساس، أريد أن يتم إرجاع القيمة الجديدة التي تمت زيادتها تلقائيًا عند اكتمال البيان.

شكرًا!

هل كانت مفيدة؟

المحلول

يشير تعليق التوضيح الخاص بك إلى أنك مهتم بالتأكد من أن LAST_INSERT_ID() لا يعطي نتيجة خاطئة في حالة حدوث INSERT متزامن آخر.كن مطمئنًا أنه من الآمن استخدام LAST_INSERT_ID() بغض النظر عن الأنشطة المتزامنة الأخرى.LAST_INSERT_ID() يُرجع فقط المعرف الأحدث الذي تم إنشاؤه أثناء الجلسة الحالية.

يمكنك أن تجرب ذلك بنفسك:

  1. افتح نوافذ شلن ، قم بتشغيل عميل MySQL في كل منهما واتصل بقاعدة البيانات.
  2. شل 1:أدخل في جدول مع مفتاح Auto_increment.
  3. شل 1:حدد last_insert_id () ، انظر النتيجة.
  4. شل 2:إدراج في نفس الجدول.
  5. شل 2:حدد last_insert_id () ، انظر النتيجة مختلفة عن shell 1.
  6. شل 1:حدد last_insert_id () مرة أخرى ، راجع تكرار النتيجة السابقة.

إذا فكرت في الأمر، فهذه هي الطريقة الوحيدة المنطقية.يجب أن تعمل جميع قواعد البيانات التي تدعم آليات الزيادة الرئيسية التلقائية بهذه الطريقة.إذا كانت النتيجة تعتمد على حالة سباق مع إمكانية إدراج عملاء آخرين بشكل متزامن، فلن تكون هناك طريقة يمكن الاعتماد عليها للحصول على آخر قيمة معرف مدرجة في جلستك الحالية.

نصائح أخرى

ماي إس كيو إل LAST_INSERT_ID()

ووالخلية مستندات وصف وظيفة: <لأ href = "http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id" يختلط = "نوفولو noreferrer "> LAST_INSERT_ID ()

[تحديد حد أقصى (primary_key_column_name) من TABLE_NAME] أهه لا nessecarily. أنا لست الرجل الخلية ولكن هناك طريقة محددة للحصول على معرف إدراج الماضي عن الإجراء الأخير أكملت التي هي أكثر قليلا قوية من هذا. ماذا لو حدث لإدراج بينك الكتابة إلى الجدول والاستعلام عن ذلك؟ أعرف عن لأنه اكتوى لي قبل عدة أقمار (نعم هكذا فإنه لا يحدث). إذا فشل كل شيء آخر قراءة دليل: HTTP: // dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top