אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » לימוד MySQL » מפתחות ראשיים ב-MySQL

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

רן בר-זיק פברואר 14, 2010 7:50 am אין תגובות

הסבר על Primary Keys וכיצד לבצע יצירה, עדכון או מחיקה

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

במאמר הקודם למדנו על סוגי המנועים השונים ב-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 מרמת בסיס ועד רמה מתקדמת. הספר הדיגיטלי, שרלוונטי גם לכל מסדי הנתונים שעובדים עם SQL – זמין כאן כחלק מהפרויקט "ללמוד ג'אווהסקריפט בעברית" – זו הדרך הטובה ביותר ללמוד באופן מקיף MySQL.

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
למדריך ה-MySQL הקודםמנועי מסדי נתונים של MySQL
למדריך ה-MySQL הבאמפתחות זרים ב-MySQL
לתפריט המדריכים ל-MySQL
MySQL
ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד