סוג הנתונים ENUM ב-MySQL הוא א אובייקט מחרוזת . זה מאפשר לנו להגביל את הערך שנבחר מתוך רשימה של ערכים מותרים במפרט העמודה בזמן יצירת הטבלה. זה קיצור של ספירה , כלומר לכל עמודה עשוי להיות אחד מהערכים האפשריים שצוינו. זה משתמש אינדקסים מספריים (1, 2, 3...) כדי לייצג ערכי מחרוזת.
MySQL סוג הנתונים 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.
מחרוזות java
ריק: זוהי מילה נרדפת ל-DEFAULT NULL, וערך האינדקס שלו הוא תמיד NULL.
בְּרִירַת מֶחדָל: כאשר לא צוין ערך בעמודה, סוג הנתונים ENUM מוסיף את ערך ברירת המחדל. במילים אחרות, אם המשפט INSERT אינו מספק ערך עבור עמודה זו, ערך ברירת המחדל יוכנס. הביטוי DEFAULT אינו מאפשר להכניס פונקציה. סוג הנתונים ENUM ב-My SQL כולל את ערכי DEFAULT כ-NULL או מחרוזת ריקה ('').
דוגמה של MySQL ENUM
תן לנו להבין איך סוג הנתונים ENUM עובד ב-MySQL עם האיור הבא. כאן, אנחנו הולכים ליצור טבלה בשם ' חולצות ' שמכיל שלוש עמודות: מזהה, שם וגודל.
עמודת הגודל משתמשת בסוג הנתונים ENUM ויש לה גדלים קטנים, בינוניים, גדולים ו-x-large. MySQL ממפה את איברי הספירה הללו לאינדקס מספרי שבו קטן=1, בינוני=2, גדול=3 ו-x-large=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;
התמונה הבאה מכילה את כל תוצאות השאילתה שלמעלה המכילות את ערכי הספירה במילולי מחרוזת בלבד:
מיון ENUM
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. לא נוכל להשתמש במשתנה המשתמש בתור איבר ספירה. ניתן לראות זאת בדוגמה הבאה:
תוכניות c
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. לא נוכל להוסיף תכונות נוספות לרשימות הספירה.