كيفية إضافة إلى جدول MySQL فقط إذا كان السجل موجودا بالفعل؟

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

سؤال

أحصل على مجموعة من السلاسل من كائن JSON. أريد حفظ هذه السلاسل في DB، ولكن فقط إذا لم تكن موجودة بالفعل هناك. ما هي أفضل طريقة لمقارنة ما هو بالفعل في DB مع ما أنا على وشك الدخول إليه، واستبعاد المباريات؟

أنا أستخدم php و mysql.

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

المحلول

نظرا لأن ما تصفه هو الرغبة في مغادرة السجل بمفرده إذا كانت الأوتار موجودة بالفعل، فما الذي تريده هو IGNORE معدل إلى INSERT (أي تفعل INSERT IGNORE ...). من شأنها أن تجعل الاستعلام الخاص بك لا تفعل شيئا إذا تم العثور على مفتاح مكرر. هذا يتطلب ذلك بالطبع أن حقول السلسلة التي تقوم فيها بإدراج مفاتيح فريدة منها.

نصائح أخرى

يستبدل قد يفعل ما تريد - إدراجه، ولكن إذا كان المفتاح الأساسي موجودا بالفعل يتم حذف هذا الصف أولا. ما لم تكن بحاجة إلى الاحتفاظ بأعمدة أخرى في الجدول، يجب أن تعمل.

http://dev.mysql.com/doc/refman/5.0/en/Replace.html.

في MySQL، يمكنك استخدام عبارة "إدراج" مع خيار "التجاهل"، والتي لن تقوم بإدخال صف إذا كانت الحقول الفريدة تتطابق مع تلك الصفات الموجودة. يجب أن يكون للجدول قيد التفرد مع المجالات ذات الصلة المدرجة.

مثال بسيط جدا:

طاولتك: المستخدمون الحقول الخاصة بك: users_id، user_name، zip_code، فهرس فريد من نوعه: user_name

إدراج في المستخدمين (user_name، zip_code، تم إنشاؤها) القيم ("جو"، 75034، "2009-06-11") على مستخدمي التحديث المفتاح المكرر_ID = last_insert_id (ID)

يحتوي User_Name على فهرس فريد؛ لذلك، لا يمكنك إضافتها أكثر من مرة. عند استخدام SQL أعلاه، سيضيف ذلك جيدا في المرة الأولى. في المرة الثانية، لن يفعل ذلك في الواقع الإدراج. الطريقة التي يقوم بها مفتاح مكرر الإعداد، يمكنك الآن جلب معرف الإدراج الأخير من MySQL مع PHP ومعرفة ما كان عليه المستخدمين هو ما إذا كان إدراج حقيقي أو مكررة.

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