מפתחות ראשיים ב-MySQL

במאמר הקודם למדנו על סוגי המנועים השונים ב-MySQL. עכשיו נותר לנו ללמוד על מפתחות – אחד החלקים החשובים בטבלה.

במאמר על נורמליזציה של נתונים, ראינו שלמפתח יש חשיבות גדולה מאד בהעברת מסד נתונים מנורמליזציה 0 לדרגות נורמליזציה גבוהות יותר. הגדרת המפתח היא קריטית כאשר אנו בונים את הסכמה של מסד הנתונים שלנו ומגדירים את הטבלה. כיוון שבמאמר על הנורמליזציה הוסבר באופן יותר מקיף כיצד לבחור את המפתח, במאמר זה נסתפק בהסבר שהמפתח הוא הרכיב העיקרי שאליו קשורים כל הנתונים בטבלה. אנו מציגים במאמר רק טבלאות מדרגת נורמליזציה שלישית.

ב-MySQL ישנם 3 סוגי מפתחות וכל מפתח מוגדר כאינדקס. אינדקס, למי שלא קרא את המאמר שהסביר על האינדקסים בפירוט, הוא בעצם מנגנון שעוזר ל-MySQL לשלוף מידע ביעילות רבה יותר. 3 סוגי המפתחות ב-MySQL הם: מפתח ראשי (Primary key) מפתח ייחודי (Unique Key) ומפתח זר (Foreign key).

מפתח ראשי

מפתח ראשי הוא בעצם ה-מפתח של הטבלה. אליו קשורים (בטבלה שעברה נירמול מסדר גודל 3) כל שאר השדות בטבלה. המפתח הראשי הוא גם ייחודי, כלומר – כל ערך בו מופיע פעם אחת בלבד. בדרך כלל מקובל מאד שהמפתח הייחודי יכיל מספר – כך גם קל הרבה יותר למצוא אותו בעזרת האינדקס שלו. (כזכור כל מפתח הוא גם אינדקס ואינדקסים של מספרים יותר יעילים).
מפתח ראשי יכול להיות מספר תעודת זהות, מספר מ-1 ועד אינסוף שנקבע לפי סדר הכנסת השורות (שורה ראשונה שנכנסת מקבלת 1, זו שאחריה 2 וכך הלאה והלאה), שם פרטי + משפחה (יהיו בעיות אם יש מישהו עם שם זהה, הנתון שלו לא ייכנס).

ברוב המקרים המפתח הראשי הוא מספר מ-1 עד אינסוף שנבחר לפי סדר הכנסת השורות. כך הלקוח הראשון שייכנס לטבלה יקבל id=1, הלקוח השני שייכנס לבטלה יקבל id=2 וכך הלאה. בעוד שאנו יכולים להגדיר את המספר, ניתן לעשות את זה באופן אוטומטי באמצעות הפקודה AUTO_INCREMENT. שדה שמוגדר כ-AUTO_INCREMENT ימוספר באופן אוטומטי מ-1.

במקרה כזה, מקובל לתת למפתח הראשי שלנו את סוג הנתון SERIAL שהוא מספר לא שלילי (unsigned) ואינו יכול להיות NULL. שזה בדיוק מתאים למפתח ראשי שכאמור אינו יכול להיות ריק (שלילי הוא יכול להיות).

בואו ונניח שאני רוצה ליצור טבלת לקוחות. הטבלה כוללת מספר של לקוח שהוא יהיה המפתח הראשי. המספר ייקבע לפי סדר הכנסת הלקוח. מלבד מספר הלקוח יש לנו שם של הלקוח, שם משפחה ושנת לידה.


CREATE TABLE costumers (costumer_id SERIAL PRIMARY KEY, costumer_first_name VARCHAR (20), costumer_last_name VARCHAR (20), costumer_year_of_birth TINYINT);

כפי שקל לראות מהשאילתה, די בהוספת PRIMARY KEY לשדה על מנת להפוך אותו לשדה של מפתח ראשי.

תיווצר לנו טבלה שבה יש PRIMARY KEY. אם אני אעשה DESCRIBE לטבלה שלי, אני אוכל לראות אותו.


+------------------------+---------------------+------+-----+---------+----------------+
| Field                  | Type                | Null | Key | Default | Extra       |
+------------------------+---------------------+------+-----+---------+----------------+
| costumer_id            | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| costumer_first_name    | varchar(20)         | YES  |     | NULL    |       |
| costumer_last_name     | varchar(20)         | YES  |     | NULL    |       |
| costumer_year_of_birth | tinyint(4)          | YES  |     | NULL    |       |
+------------------------+---------------------+------+-----+---------+----------------+

מחיקת PRIMARY KEY תעשה באופן הבא:


ALTER TABLE costumers DROP PRIMARY KEY;

חשוב להדגיש ש-SERIAL משמש אך ורק ל-PRIMARY KEY, אם השתמשתם ב-SERIAL להגדרת השדה ואתם רוצים להוריד את ה-PRIMARY KEY, עליכם לשנות את סוג המידע של השדה.

אם אני רוצה להוסיף PRIMARY KEY לטבלה קיימת, אני עושה זאת כך:


ALTER TABLE costumers ADD PRIMARY KEY (costumer_id);

יצירת PRIMARY KEY מכמה שדות משולבים יחדיו.

לעתים יש צורך בשילוב של מספר שדות על מנת ליצור מהם PRIMARY KEY מאוחד. MySQL מאפשר את זה בתנאים הבאים : עד 16 שדות ועד אורך 256 ביטים. עושים את זה בדרך כלל על מנת ליצור מפתחות טבעיים – כך למשל אפשר להשתמש בשם האדם כ-PRIMARY KEY במידה ומדובר במערכת שבה אנו יודעים ששם האדם הוא ערך ייחודי. על מנת להשתמש בשם האדם אנו צריכים להשתמש ב-PRIMARY KEY המורכב משם המשפחה שלו ושמו הפרטי.

הוספת PRIMARY KEY לכמה שדות בטבלה קיימת.


ALTER TABLE costumers ADD PRIMARY KEY (costumer_last_name, costumer_first_name);

הורדת ה-PRIMARY KEY מכמה שדות זהה להורדה משדה אחד.

מפתח ייחודי

מפתח ייחודי שאינו מפתח ראשי הוא פשוט אינדקס שנוצר כייחודי. אם אנו מגדירים שדה מסוים כאינדקס ייחודי, אז זה בדיוק כמו להגדיר אותו כמפתח ייחודי.

במאמר הבא אנו נלמד על מפתחות זרים ב-MySQL.

כדאי תמיד להשאר מעודכנים! הרשמו לעדכונים של האתר במייל! - המייל יישלח כל יום ראשון בעשר בבוקר ויכיל אך ורק את המאמרים שהתפרסמו באינטרנט ישראל. ללא ספאם, ללא הצפות, ללא בלגנים. 🙂
למדריך ה-MySQL הקודם
למדריך ה-MySQL הבא

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (1 הצבעות, ממוצע: 4.00 מתוך 5)

תגיות: פורסם בקטגוריה: לימוד MySQL

אל תשארו מאחור! יש עוד מה ללמוד!

הצטרפו לעדכונים!

העדכונים נשלחים אך ורק כאשר האתר מתעדכן.

רן בר-זיק

רן בר-זיק כותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי
הטוויטר שלי
פרופיל הפייסבוק שלי
אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.