במאמר הקודם למדנו איך ליצור מסד נתונים מסוג MySQL. מסד הנתונים שיצרנו הוא סוג של כלי ריק שאין בתוכו דבר. הגיע הזמן להכניס לתוכו טבלאות. טבלאות (tables) הן בעצם מה שמכיל את התוכן הממשי במסד נתונים. אין כמעט הגבלה למספר הטבלאות שמסד נתונים אחד יכול להכיל. מקובל להקצות טבלה אחת לכל קבוצת נתונים. כמו למשל נתוני משתמשים בטבלה אחת והתוכן שהם יצרו בטבלה שניה.
הטבלאות כשמן כן הן, טבלאות שיש להן כותרת (שם השדה) ונתונים. למשל:
name | age |
Moshe | 20 |
Haim | 30 |
Rahamim | 24 |
Noam | 12 |
זו דוגמא לטבלה שיכולה בהחלט להתקיים במסד נתונים MySQL. יש לטבלה כותרות (שם וגיל) שהן למעשה השמות של השדות. טבלה יכולה להכיל אינספור נתונים שמכילים שמות וגילאים. אנו ראשית נטפל ביצירת הטבלה – כלומר יצירת הכותרות. אחרי שהגדרתי טבלה, כותרות ושמות כותרות – אני יכול להכניס אליה כמה נתונים שארצה.
ניכנס ל-MySQL Console ונשתמש ב-internet_database שאותו למדנו ליצור במאמר הקודם. אחרי שכתבנו use internet_database אנו יכולים לבצע פעולות על מסד הנתונים שלנו. בואו וניצור את הטבלה שלעיל (רק בלי הנתונים כמובן).
יצירת הטבלה היא פשוטה מאד:
CREATE TABLE internet_names (name VARCHAR(20), age TINYINT);
השורה הזו מתחלקת לשני חלקים. הראשון הוא CREATE TABLE ושם הטבלה (בדוגמא – internet_names). כך אנו יוצרים את הטבלה. בתוך הסוגריים אנו יוצרים את הכותרות (במקרה שלנו שם וגיל) ומגדירים את סוג הנתונים שיהיו בהן. במקרה שלנו מדובר ב-VARCHAR ו-TINYINT כאשר ב-VARCHARS העברנו גם את מספר האותיות שהשדה צריך להכיל כיוון שסוג VARCHAR מחייב את זה.
הקפדה על סוגי נתונים חדשים לא רק מייעלת את כל מהלך החיפוש בהמשך, אלא גם חוסכת לנו המון כאב ראש אחר כך. אם למשל אני אתבלבל ואנסה להכניס נתון לא מתאים לגיל (למשל מחרוזת טקסט) אני לא אוכל לעשות את זה.
סוגי הנתונים
ערכים נומריים
ישנם מספר ערכים נומריים שאפשר להכניס שהשוני היחידי בינהם הוא גודלם. לכל סוג יש טווח מסוים ממספר שלילי עד מספר חיובי כאשר אפשר להגדיל את הטווח באמצעות ויתור על המספרים השליליים.
ניקח לדוגמא את TINYINT שבו השתמשנו בדוגמא. הטווח שלו הוא בין -128 ל-127. אם הייתי יוצר את TINYINT באופן הבא:
CREATE TABLE internet_names (name VARCHAR(20), age TINYINT(UNSIGNED));
הייתי יכול להכניס מספרים לשדה בגודל של מ-0 עד 255. וזה גם היה יותר נכון, כי אין גיל שלילי.
הנה הסוגים השונים של המספרים – עם unsigned ובלעדיו.
סוג | ערך תחתון | ערך עליון |
(Signed/Unsigned) | (Signed/Unsigned) | |
TINYINT |
-128 |
127 |
0 |
255 |
|
SMALLINT |
-32768 |
32767 |
0 |
65535 |
|
MEDIUMINT |
-8388608 |
8388607 |
0 |
16777215 |
|
INT |
-2147483648 |
2147483647 |
0 |
4294967295 |
|
BIGINT |
-9223372036854775808 |
9223372036854775807 |
0 |
18446744073709551615 |
אנו יכולים לאכוף הוספת אפסים לכל מספר על מנת שימלא את כל גודל התא. למשל הוספת אפסים ל-TINYINT תגרום ל-1 להפוך ל-001. הוספת אפסים ל-SMALLINT תגרום ל-1 להפוך ל-00005 וכך הלאה. את זה עושים באמצעות תגית ZEROFILL. הוספת תגית ZEROFILL גם מונעת מספרים שליליים בדיוק כמו UNSSIGNED.
CREATE TABLE internet_names (name VARCHAR(20), age TINYINT ZEROFILL);
כאשר בוחרים INT ניתן להכניס אליו מספר שהוא זה שקובע כמה ספרות יהיו בו, במקום להסתפק בטווחים של השאר.
כמו כן אפשר לקבוע טווח של כמה ספרות אחרי הנקודה. אם אני מכניס את DEC שהוא קיצור של DECIMAL. הוא דומה ל-INT כמעט בכל, למעט העובדה שאפשר להכניס לתוכו גם טווח וגם כמה ספרות אחרי הנקודה אנו מוכנים לקבל. הסינטקס פשוט למדי:
CREATE TABLE internet_names (name VARCHAR(20), age DEC(5,2);
כאשר הכוונה היא למספר עם טווח של 5 ועד 2 ספרות אחרי הנקודה – ממינוס 999.99 עד 999.99. הטווח כולל את הספרות שאחרי הנקודה.
ערכי טקסט
VARCHAR ו-CHAR
כאשר אנו רוצים לאכסן מחרוזות קטנות יחסית של טקסט, VARCHAR או CHAR יהיו הבחירה שלנו. מדובר בתוכן טקסטואלי מסוגים שונים כאשר אנו מעבירים לו פרמטר של בין 0 ל-255 ל-CHAR ופרמטר של בין 0 ל-65,535. הפרמטר הזה קובע את אורך השדה. CHAR יהיה תמיד בערך שקבענו לו. אם אנו מכניסים לתא ערך עם פחות תווים, אז CHAR יכניס רווחים כדי שכל התאים יהיו באורך שקבענו.
BLOB ן-TEXT
אם אנו צריכים לאכסן כמות גדולה יותר של טקסט, בשביל זה אנו משתמשים ב-TEXT או ב-BLOB. BLOB אמור לאכסן אובייקטים בינאריים ואילו TEXT, ובכן, מאכסן טקסט.
TINYTEXT בגודל של עד 255 תווים.
TEXT\BLOB – בגודל של עד 65535 תווים.
MEDIUMTEXT\MEDIUMBLOB – בגודל של עד 16777215 תווים.
LONGTEXT\LONGBLOB – בגודל של עד 4294967295 תווים.
⚠️המדריכים כאן הם טעימה בלבד! יש ספר מקיף המלמד MySQL מרמת בסיס ועד רמה מתקדמת. הספר הדיגיטלי, שרלוונטי גם לכל מסדי הנתונים שעובדים עם SQL – זמין כאן כחלק מהפרויקט "ללמוד ג'אווהסקריפט בעברית" – זו הדרך הטובה ביותר ללמוד באופן מקיף MySQL.