نوع البيانات ENUM في MySQL هو كائن السلسلة . يسمح لنا بتحديد القيمة المختارة من قائمة القيم المسموح بها في مواصفات العمود في وقت إنشاء الجدول. إنه قصير ل تعداد ، مما يعني أن كل عمود قد يحتوي على إحدى القيم المحتملة المحددة. يستخدم الفهارس الرقمية (1، 2، 3...) لتمثيل قيم السلسلة.
ماي إس كيو إل يحتوي نوع البيانات ENUM على المزايا التالية:
- تخزين بيانات مضغوط حيث قد يحتوي العمود على مجموعة محدودة من القيم المحتملة المحددة. هنا، يتم استخدام قيم السلسلة تلقائيًا كمؤشر رقمي.
- فهو يسمح باستعلامات ومخرجات قابلة للقراءة لأنه يمكن ترجمة الأرقام مرة أخرى إلى السلسلة المقابلة.
- يمكنه قبول العديد من أنواع البيانات مثل الأعداد الصحيحة والفاصلة العائمة والعشرية والسلسلة.
بناء الجملة
فيما يلي بناء الجملة المستخدم لتحديد نوع بيانات ENUM في العمود:
كيفية معرفة حجم العرض
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
في بناء الجملة أعلاه، قمنا بتعريف ثلاث قيم ENUM فقط، ولكن يمكن زيادتها وفقًا لاحتياجاتنا. هنا، علينا التأكد من أن قيم التعداد يجب أن تبقى دائمًا داخل ملف سلسلة مقتبسة حرفيا .
يتيح لنا MySQL تحديد نوع بيانات ENUM بالسمات التالية:
غير فارغة: بشكل افتراضي، نوع البيانات ENUM هو NULL. إذا كنا لا نريد السماح بالقيم NULL، فمن الضروري استخدام الخاصية NOT NULL أثناء تحديد عمود ENUM.
باطل: وهو مرادف لـ DEFAULT NULL، وقيمة الفهرس الخاصة به تكون دائمًا NULL.
تقصير: عندما لا يتم تحديد قيمة في العمود، يقوم نوع البيانات ENUM بإدراج القيمة الافتراضية. بمعنى آخر، إذا لم توفر عبارة INSERT قيمة لهذا العمود، فسيتم إدراج القيمة الافتراضية. التعبير الافتراضي لا يسمح بإدراج وظيفة. يتضمن نوع البيانات ENUM في My SQL القيم الافتراضية كـ NULL أو سلسلة فارغة ('').
مثال MySQL ENUM
دعونا نفهم كيفية عمل نوع البيانات ENUM في MySQL من خلال الرسم التوضيحي التالي. سنقوم هنا بإنشاء جدول اسمه '' قمصان ' الذي يحتوي على ثلاثة أعمدة: المعرف والاسم والحجم.
يستخدم عمود الحجم نوع البيانات ENUM وله أحجام صغيرة ومتوسطة وكبيرة وكبيرة جدًا. يقوم MySQL بتعيين عناصر التعداد هذه إلى فهرس رقمي حيث صغير=1، متوسط=2، كبير=3، وx-كبير=4 على التوالي. قم بتنفيذ الاستعلام التالي لإنشاء جدول:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
بعد ذلك، نحن بحاجة إلى إدراج القيم في الجدول. أثناء الإدراج، يمكن إدراج قيم التعداد إما كسلسلة حرفية أو فهارسها الرقمية، وكلاهما متماثل. قم بتنفيذ العبارة التالية لإدراج القيم في الجدول:
أول كمبيوتر محمول
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
الآن، قم بتنفيذ عبارة SELECT لرؤية القيم المدرجة في الجدول:
mysql> SELECT * FROM shirts;
تحتوي الصورة التالية على جميع نتائج الاستعلام أعلاه التي تحتوي على قيم التعداد في سلسلة حرفية فقط:
فرز التعداد
يقوم MySQL بفرز قيم التعداد بناءً على فهارسها الرقمية التي تعتمد على الترتيب الذي أدخلنا به البيانات في مواصفات العمود. على سبيل المثال ، إذا قمنا بتعريف التعداد على أنه ENUM ('b'، 'a'، ''، 'c'). بعد ذلك، تأتي b قبل a، وتأتي السلسلة الفارغة قبل c (سلسلة غير فارغة)، وتأتي القيمة NULL قبل القيم الأخرى.
لذلك، إذا كنا لا نريد الحصول على نتيجة غير متوقعة مع نوع البيانات ENUM باستخدام جملة ORDER BY، فاتبع القواعد التالية:
أنت لصق
- تحديد قيم التعداد بالترتيب الأبجدي.
- هذا هو التأكد من أن اسم العمود بالترتيب المعجمي بدلاً من رقم الفهرس.
يشرح المثال التالي فرز التعداد بشكل أكثر وضوحًا. لذلك، إذا كنت تريد الحصول على مقاسات القمصان بترتيب معين، فقم بتنفيذ العبارة أدناه:
mysql> SELECT * FROM shirts ORDER BY size DESC;
سيعطي هذا الاستعلام الإخراج على النحو التالي حيث يمكننا أن نرى أن حجم القمصان بترتيب تنازلي:
حدود نوع بيانات ENUM
فيما يلي عيوب نوع البيانات ENUM في MySQL:
1. إذا أردنا تعديل قيم/أعضاء التعداد، فيمكن القيام بذلك عن طريق إعادة بناء الجدول بأكمله باستخدام أمر ALTER TABLE. إنه يستخدم مواردنا ووقتنا بشكل مكلف أيضًا.
2. لا يمكننا استخدام تعبير مع أعضاء التعداد. على سبيل المثال، لا يتم تنفيذ عبارة CREATE هذه لأنها تستخدم وظيفة CONCAT() لإنشاء أعضاء التعداد.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. لا يمكننا استخدام متغير المستخدم كعضو تعداد. ويمكن رؤيته في المثال أدناه:
json من كائن جافا
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. يوصى بعدم استخدام القيم الرقمية كعناصر تعداد.
5. يعد الحصول على قائمة تعداد معلومات كاملة أمرًا معقدًا لأننا نحتاج إلى الوصول إلى قاعدة بيانات information_schema.
6. قد نواجه مشكلة أثناء نقل ENUM إلى RDBMS أخرى لأن العديد من قواعد البيانات لا تدعم هذا النوع من البيانات.
7. لا يمكننا إضافة المزيد من السمات إلى قوائم التعداد.