كيف تقوم MySQL بحذف الصفوف المكررة

How Mysql Delete Duplicate Rows



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

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







قبل أن نواصل ، نفترض:



  1. لديك MySQL مثبتة وتعمل على نظامك
  2. لديك حق الوصول إلى قاعدة البيانات.
  3. لديك حق الوصول إلى قاعدة بيانات للتجربة أو الاختبار

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



يتم توفير الموارد أدناه:





الاستخدام الأساسي

قبل أن نبدأ ، سننشئ عن قصد جدولًا يحتوي على قيم مكررة لأغراض الاختبار. فيما يلي استعلامات SQL لتنفيذ هذا الإجراء:

استعمال العالمية؛
قطرة طاولة لو EXISTS المستخدمين؛
يزيد طاولة المستخدمين(هوية شخصية ذكاء المفتاح الأساسي ليس باطل زيادة تلقائية واسم االمستخدم فاركار (10) ليس باطل والاسم بالكامل فاركار (عشرين)والبريد الإلكتروني فاركار (255) ليس باطل )؛
إدراج إلى المستخدمين(اسم االمستخدموالاسم بالكاملوالبريد الإلكتروني) القيم
('برج العذراء'و 'كلود م. موري'و '[بريد إلكتروني محمي]')و
('صحافة'و 'تيفاني جي بيلي'و '[بريد إلكتروني محمي]')و
('صاروخ'و 'كريستوفر إس بايتون'و '[بريد إلكتروني محمي]')و
('المادة المظلمة'و 'باتريشيا جيه فوكس'و '[بريد إلكتروني محمي]')و
('موضوعات'و 'فاي إتش هارتلي'و '[بريد إلكتروني محمي]')و
('المادة المظلمة'و 'باتريشيا جيه فوكس'و '[بريد إلكتروني محمي]')و
('صاروخ'و 'كريستوفر إس بايتون'و '[بريد إلكتروني محمي]')و
('أرتميس'و 'ويسلي سي ديلارد'و '[بريد إلكتروني محمي]')؛

لا تتردد في تعديل الاستعلام أعلاه ليناسب احتياجاتك. يجب عليك أيضًا التأكد من إنشاء قاعدة البيانات (العالم) لتجنب الأخطاء.



الآن ، إذا حصلنا على جميع البيانات داخل الجدول وبالترتيب حسب اسم المستخدم ، فسنرى التكرارات الموجودة لدينا كما هو موضح:

mysql> استعمال العالمية؛
قاعدة البيانات تغير
mysql> تحديد * من عند المستخدمين ترتيب حسب اسم االمستخدم؛
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|هوية شخصية|اسم االمستخدم|الاسم بالكامل|البريد الإلكتروني|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |أرتميس|ويسلي سي ديلارد|[البريد الإلكتروني محمي]|
| 4 |المادة المظلمة|باتريشيا جيه فوكس|[البريد الإلكتروني محمي]|
| 6 |المادة المظلمة|باتريشيا جيه فوكس|[البريد الإلكتروني محمي]|
| 2 |صحافة|تيفاني جي بيلي|[البريد الإلكتروني محمي]|
| 5 |موضوعات|فاي هـ. هارتلي|[البريد الإلكتروني محمي]|
| 3 |صاروخ|كريستوفر س بايتون|[البريد الإلكتروني محمي]|
| 7 |صاروخ|كريستوفر س بايتون|[البريد الإلكتروني محمي]|
| 1 |برج العذراء|كلود إم موري|[البريد الإلكتروني محمي]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

كما ترى من الجدول أعلاه ، لدينا قيمتان مكررتان تجعلان قاعدة البيانات أكبر بدون سبب وتسبب سرعات بطيئة.

دعونا الآن نتعلم كيف يمكننا إزالة هذه القيم.

# 1 - حذف الانضمام

تتمثل إحدى طرق إزالة الصفوف المكررة في قاعدة البيانات في استخدام جملة MySQL DELETE JOIN. ومع ذلك ، يستخدم الاستعلام المعرفات لإزالة القيم المكررة.

على سبيل المثال ، لإزالة القيم المكررة في جدول المستخدمين أعلاه ، يمكننا إدخال:

حذف الجدول 1 من عند المستخدمين الجدول 1 داخلي انضم المستخدمين الجدول 2 أين table1.id<table2.id و table1.email=table2.email؛

بمجرد تنفيذ الاستعلام أعلاه ، ستقوم بإزالة القيم المكررة كما هو موضح في الإخراج أدناه:

mysql> حذف الجدول 1 من عند المستخدمين الجدول 1 داخلي انضم المستخدمين الجدول 2 أين table1.id<table2.id و table1.email=table2.email؛
استعلام موافقو 2الصفوف المتضررة(0.01ثانية)

mysql> تحديد * من عند المستخدمين ترتيب حسب اسم االمستخدم؛
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|هوية شخصية|اسم االمستخدم|الاسم بالكامل|البريد الإلكتروني|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |أرتميس|ويسلي سي ديلارد|[البريد الإلكتروني محمي]|
| 6 |المادة المظلمة|باتريشيا جيه فوكس|[البريد الإلكتروني محمي]|
| 2 |صحافة|تيفاني جي بيلي|[البريد الإلكتروني محمي]|
| 5 |موضوعات|فاي هـ. هارتلي|[البريد الإلكتروني محمي]|
| 7 |صاروخ|كريستوفر س بايتون|[البريد الإلكتروني محمي]|
| 1 |برج العذراء|كلود إم موري|[البريد الإلكتروني محمي]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

# 2 - دالة Row_Number ()

الطريقة الثانية التي يمكننا تنفيذها هي استخدام وظيفة MySQL row_number (). هذه الوظيفة مدعومة في MySQL الإصدار 8 والإصدارات الأحدث.

إنه يعمل عن طريق تعيين قيمة int متسلسلة لكل صف ، مع وجود صفوف تحتوي على قيم مكررة تحصل على قيمة أعلى من 1.

لمعرفة المزيد حول هذه الوظيفة ، استخدم المورد المقدم أدناه:

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number

ضع في اعتبارك الاستعلام أدناه الذي يعرض معرف الصفوف ذات القيم المكررة:

تحديد هوية شخصية من عند ( تحديد هوية شخصيةورقم الصف()على( تقسيم حسب اسم المستخدم ترتيب حسب اسم االمستخدم) كما row_var من عند المستخدمين)t1 أين row_var> 1؛

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

+ ---- +
|هوية شخصية|
+ ---- +
| 6 |
| 7 |
+ ---- +
2صفوف في يضع (0.01ثانية)

إذا كنت تريد إزالة القيم ، فما عليك سوى استبدال عبارة SELECT بعبارة DELETE كما هو موضح أدناه:

حذف من عند المستخدمين أين هوية شخصية في ( تحديد هوية شخصية من عند ( تحديد هوية شخصيةورقم الصف()على( تقسيم حسب اسم المستخدم ترتيب حسب اسم االمستخدم) كما row_var من عند المستخدمين)t1 أين row_var> 1)؛

أخيرًا ، يمكنك التحقق من إزالة القيم المكررة باستخدام عبارة SELECT.

mysql> تحديد * من عند المستخدمين ترتيب حسب اسم االمستخدم؛
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|هوية شخصية|اسم االمستخدم|الاسم بالكامل|البريد الإلكتروني|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |أرتميس|ويسلي سي ديلارد|[البريد الإلكتروني محمي]|
| 4 |المادة المظلمة|باتريشيا جيه فوكس|[البريد الإلكتروني محمي]|
| 2 |صحافة|تيفاني جي بيلي|[البريد الإلكتروني محمي]|
| 5 |موضوعات|فاي هـ. هارتلي|[البريد الإلكتروني محمي]|
| 3 |صاروخ|كريستوفر س بايتون|[البريد الإلكتروني محمي]|
| 1 |برج العذراء|كلود إم موري|[البريد الإلكتروني محمي]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

استنتاج

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