MySQL الأحرف البديلة: إعجاب، عدم إعجاب، رمز الهروب، (%)، (_)

⚡ ملخص ذكي

MySQL تُتيح الأحرف البديلة البحث القائم على الأنماط من خلال ربط عاملي LIKE وNOT LIKE بأحرف خاصة. وهذا يُفسر استخدام الأحرف البديلة (النسبة المئوية والشرطة السفلية)، وكلمة ESCAPE، والاستعلامات العملية على قاعدة بيانات myflixdb، واعتبارات الأداء.

  • 🔍 التعريف الأساسي: الأحرف البديلة هي أحرف نائبة تستخدمها LIKE و NOT LIKE لمطابقة أنماط النصوص بدلاً من القيم الدقيقة.
  • 📊 النسبة المئوية للبطاقة الجامحة: يتطابق رمز النسبة المئوية (%) مع صفر أو أكثر من الأحرف، لذا فإن '%code%' يعيد كل عنوان فيلم يحتوي على كلمة code.
  • 🔡 رمز البدل (الشرطة السفلية): يتطابق الرمز _ مع حرف واحد بالضبط، لذا فإن '200_' يعيد العناوين التي تم إصدارها بين عامي 2000 و 2009.
  • 🚫 قاعدة النفي: تقوم الدالة NOT LIKE بعكس المقارنة وإرجاع كل صف لا يطابق النمط المحدد.
  • 🛡️ التعامل مع حالات الهروب: تُستخدم الكلمة المفتاحية ESCAPE لتمييز علامة % أو _ حرفية داخل سلسلة البحث بحيث يتم التعامل معها كبيانات.
  • ⚡ رؤية الأداء: يؤدي استخدام علامة النسبة المئوية (%) في بداية الجدول إلى حظر استخدام الفهرس وفرض مسح كامل للجدول، لذا قم بتثبيت الأنماط على اليسار كلما أمكن ذلك.
  • 🧩 اختيار الطريقة: يغطي LIKE مطابقة البادئات واللواحق البسيطة، بينما يتعامل REGEXP مع فئات الأحرف والتناوب.

ما هي MySQL أحرف البدل؟

MySQL البدل هي أحرف خاصة تساعدك في البحث عن بيانات تطابق نمطًا معقدًا بدلًا من قيمة محددة. تُستخدم الأحرف البديلة دائمًا مع عامل المقارنة LIKE أو مع عامل المقارنة NOT LIKE.

MySQL يدعم حرفين بديلين، ويجيب كل منهما على سؤال مختلف حول بياناتك.

بطاقة تأهل معنى نمط المثال مباريات
% صفر (0) أو أكثر من الأحرف '٪شفرة٪' Code الاسم: بلاك، دافنشي Code
_ حرف واحد فقط '200_' 2005 , 2008

والآن بعد أن تم تعريف الشخصيتين، يشرح القسم التالي سبب أهمية تعلمهما.

لماذا نستخدم الأحرف البديلة في MySQL?

إذا كنتَ مُلِمًّا بلغة SQL، فقد تعتقد أنه بإمكانك البحث عن أي بيانات معقدة باستخدام عبارة SELECT وشرط WHERE. فلماذا إذًا نستخدم الأحرف البديلة؟

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

SELECT * FROM members
WHERE postal_address = 'Austin, TX'
   OR postal_address = 'Dallas, TX'
   OR postal_address = 'Iola, TX'
   OR postal_address = 'Houston, TX';

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

SELECT * FROM members
WHERE postal_address LIKE '%TX';

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

انواع من MySQL البدل

% – رمز النسبة المئوية

تُستخدم علامة النسبة المئوية (%) لتحديد نمط من صفر (0) أو أكثر من الأحرف. لديه بناء الجملة الأساسي التالي.

SELECT * FROM table_name
WHERE fieldname LIKE 'xxx%';

هنا:

  • "اختيار البيان" هو أمر SQL القياسي SELECT.
  • كلمة "WHERE" هي الكلمة الرئيسية المستخدمة لتطبيق الفلتر.
  • "LIKE" هو عامل المقارنة الذي يُستخدم مع الأحرف البديلة.
  • 'xxx' هو أي نمط محدد، مثل حرف واحد أو أكثر، و "%" يطابق أي عدد من الأحرف بدءًا من الصفر (0).

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

SELECT * FROM movies
WHERE title LIKE '%code%';

تنفيذ البرنامج النصي أعلاه في MySQL طاولة العمل مقارنة قاعدة بيانات myflixdb تعطينا النتائج الموضحة أدناه.

movie_id الاسم مدير year_released معرف الفئة
4 Code الاسم: بلاك إدغار جيمز 2010 اغية
7 دافينشي Code اغية اغية 6

لاحظ أن كلمة البحث "code" تظهر سواءً ظهرت في بداية العنوان أو في نهايته. وذلك لأن النمط يسمح بأي عدد من الأحرف قبل كلمة "code" وأي عدد من الأحرف بعدها.

لنقم الآن بتعديل البرنامج النصي بحيث يظهر رمز النسبة المئوية في بداية معايير البحث فقط.

SELECT * FROM movies
WHERE title LIKE '%code';

تنفيذ البرنامج النصي أعلاه في MySQL يعطينا برنامج Workbench على قاعدة بيانات myflixdb النتائج الموضحة أدناه.

movie_id الاسم مدير year_released معرف الفئة
7 دافينشي Code اغية اغية 6

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

لنقم الآن بنقل رمز النسبة المئوية إلى نهاية النمط. يظهر النص البرمجي المعدل أدناه.

SELECT * FROM movies
WHERE title LIKE 'code%';

تنفيذ البرنامج النصي أعلاه في MySQL يعطينا برنامج Workbench على قاعدة بيانات myflixdb النتائج الموضحة أدناه.

movie_id الاسم مدير year_released معرف الفئة
4 Code الاسم: بلاك إدغار جيمز 2010 اغية

يتم إرجاع سجل واحد فقط مرة أخرى، لأن هذا النمط يطابق كل عنوان موجود يبدأ باستخدام كلمة "code" متبوعة بأي عدد من الأحرف. وبالتالي، يحدد موضع رمز النسبة المئوية (%) معنى البحث.

💡 نصيحة: يمكن لنمط مثل 'code%' استخدام فهرس على عمود العنوان، بينما لا يمكن لنمط '%code%' ذلك. يُجبر استخدام حرف البدل الموجب (النسبة المئوية) في البداية على... MySQL لمسح كل صف، لذا احتفظ بالحرف البديل على اليمين كلما سمح البحث بذلك.

- رمز الشرطة السفلية

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

SELECT * FROM movies
WHERE year_released LIKE '200_';

تنفيذ البرنامج النصي أعلاه في MySQL يعطينا برنامج Workbench على قاعدة بيانات myflixdb النتائج الموضحة أدناه.

movie_id الاسم مدير year_released معرف الفئة
2 نسيان سارة مارشال نيكولاس ستولر 2008 2
9 Honey moonالمتطلبات البيئية جون شولتز 2005 8

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

ليس الأمر كما هو الحال مع الأحرف البديلة

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

لنفترض أننا نريد الأفلام التي لم يتم إصدارها في عام 200x. نقوم بدمج عامل النفي المنطقي مع رمز الشرطة السفلية، كما هو موضح أدناه.

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
movie_id الاسم مدير year_released معرف الفئة
1 قراصنة الكاريبي 4 روب مارشال 2011 1
4 Code الاسم: بلاك إدغار جيمز 2010 اغية
8 العالم السفليAwakenمطبعة مايكل إيل 2012 6

يتم إرجاع الأفلام التي لا تتبع نمط 200x فقط، لأن عامل النفي (NOT) يعكس نتيجة مقارنة الأحرف البديلة. لاحظ أن الصفوف التي تحتوي على اغية لا يتم إرجاع القيم بواسطة LIKE أو NOT LIKE، لأن NULL غير معروف بدلاً من كونه غير متساوٍ.

كلمة ESCAPE

يتم استخدام الكلمة الأساسية ESCAPE لـ أحرف مطابقة نمط الهروب مثل النسبة المئوية (%) والشرطة السفلية (_) عندما تشكل جزءًا من البيانات نفسها.

لنفترض أننا نريد البحث عن السلسلة النصية "67%". نقوم بتعريف حرف هروب ونضعه مباشرة قبل الحرف الذي يجب قراءته كبيانات.

LIKE '67#%%' ESCAPE '#';

إذا أردنا العثور على فيلم "67% مذنب"، فيمكننا استخدام النص الموضح أدناه.

SELECT * FROM movies
WHERE title LIKE '67#%%' ESCAPE '#';

لاحظ وجود علامتي "%%" متتاليتين في عبارة LIKE. تسبق الأولى علامة الهروب (#)، ولذلك تُعامل كجزء من السلسلة المراد البحث عنها. أما الثانية، فتحتفظ بدلالتها كعلامة بدل، وتطابق أي عدد من الأحرف التي تليها.

يمكن لأي حرف أن يعمل كحرف هروب، لذا فإن نفس الاستعلام يعمل أيضًا مع علامة المساواة.

SELECT * FROM movies
WHERE title LIKE '67=%%' ESCAPE '=';

تُغطي الأحرف البديلة الأنماط البسيطة بشكل جيد للغاية، لكن بعض عمليات البحث تتطلب قواعد أكثر تعبيرًا. توضح المقارنة أدناه حدود هذه الميزة.

MySQL الأحرف البديلة مقابل التعبيرات النمطية: أيهما يجب عليك استخدامه؟

MySQL يدعم فقط حرفين بدلًا من الأحرف العادية. قوائم الأحرف مثل [ac]، التي تقبلها بعض محركات قواعد البيانات الأخرى داخل LIKE، غير مدعومة. عندما يتطلب البحث نطاقات أحرف أو تناوبًا أو تثبيتًا، عامل التعبير النمطي هو الاختيار الصحيح.

معيار أعجبني مع الأحرف البديلة REGEXP
قوة النمط رمزان فقط: % و _ فئات الأحرف، النطاقات، التناوب، التكرار
الاستخدام النموذجي عمليات البحث باستخدام البادئة أو اللاحقة أو "يحتوي على" التحقق، المطابقة المعقدة، البدائل المتعددة
استخدام الفهرس ممكن عندما لا يبدأ النمط بعلامة النسبة المئوية (%). لا يستخدم فهرسًا أبدًا
قراءة بسيط للمبتدئين منحنى تعلم أكثر حدة

كقاعدة عامة، ابدأ باستخدام LIKE أولاً: فهو أسهل في القراءة، وهو الوحيد من بين الاثنين الذي يمكن الاستفادة منه باستخدام الفهرس. انتقل إلى REGEXP عندما يتطلب نمط واحد التعبير عن عدة بدائل، على سبيل المثال مطابقة كل عنوان يبدأ برقم. كلا المعاملين عبارة عن مقارنات للقراءة فقط، لذا لا يُغير أي منهما الصفوف المُعادة. INSERT or قم البيانات؛ فهي تقوم فقط بتصفية ما يتم اختياره بواسطة عبارة WHERE.

الأسئلة الشائعة

لا، ليس افتراضيًا. يتبع LIKE ترتيب العمود، والمعيار MySQL لا تراعي عمليات الترتيب حالة الأحرف، لذا فإن 'code%' يطابق أيضًا "Codeأضف الكلمة المفتاحية BINARY قبل العمود عندما تكون هناك حاجة إلى مطابقة حساسة لحالة الأحرف.

نعم. MySQL يحوّل هذا الأمر القيمة إلى سلسلة نصية قبل مقارنتها، ولهذا السبب يعمل الأمر year_released LIKE '200_'. يمنع هذا التحويل استخدام الفهرس على هذا العمود، لذا يُنصح باستخدام نطاقات مثل BETWEEN 2000 AND 2009 للتصفية في الجداول الكبيرة.

لا. قائمة الأحرف بين قوسين التي تقبلها بعض المحركات الأخرى غير صالحة داخل MySQL نمط LIKE. استخدم عامل التعبير النمطي بدلاً من ذلك، على سبيل المثال عنوان REGEXP '^[ac]'، لمطابقة نطاق من الأحرف الأولية.

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

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

تلخيص هذه التدوينة بـ: