مكرر وتجاهل في إدراجات MySQL

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

توفر MySQL عدة بدائل لعبارة INSERT القياسية وكل منها يعالج صفوفًا مكررة بشكل مختلف قليلاً: "INSERT IGNORE" و "INSERT ... ON DUPLICATE KEY UPDATE" و "REPLACE".

المفاتيح الأساسية والفهارس الفريدة

تتطلب فهارس المفاتيح الأساسية وقيود فهرس "UNIQUE" أن يحتوي كل صف على قيمة فريدة في عمود (أعمدة) الفهرس ، مما يسمح بتحديد كل صف بواسطة مفتاحه الأساسي أو القيمة الموجودة في عمود (أعمدة) قيود الفهرس الفريدة.

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

أدخل تجاهل

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

INSERT IGNORE INTO my_table (unique_index_column، other_column) VALUES (1 ، "قيمة أخرى") ؛

أدخل ... عند التحديث الرئيسي المكرر

INSERT ... ON DUPLICATE KEY UPDATE ستدرج أي صفوف غير مكررة كالمعتاد. ومع ذلك ، عندما يواجه صفًا مكررًا ، سيتم إجراء UPDATE في الصف الأصلي ؛ فمثلا:

INSERT INTO my_table (unique_index_column، other_column) VALUES (1، 'other value') ON DUPLICATE KEY UPDATE other_column = 'تكرار قيمة التحديث' ؛

يحل محل

يعمل REPLACE بنفس طريقة INSERT ، باستثناء أنه عندما يواجه صفًا مكررًا ، فإنه يحذف الصف الأصلي ثم يستمر في الإدراج. أي صف له قيمة فهرس فريدة مكررة سيحل محل الصف الذي يحتوي على القيمة في الأصل ؛ فمثلا:

REPLACE INTO my_table (unique_index_column، other_column) VALUES (1 ، "قيمة أخرى")