PracticU

הוספת שורה לטבלה למתקדמים - Insert

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › הוספת שורה לטבלה למתקדמים - Insert
מילון מושגים:
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
סשן - פרק זמן של פעילות רציפה בין משתמש למערכת, שבו נשמר מידע על מצבו, למשל לאחר התחברות לאתר.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
לוג - רישום מתועד של אירועים ופעולות שמתרחשים במערכת או בתוכנה, המשמש למעקב ולאיתור תקלות.
טריגר - קוד במסד נתונים שמופעל אוטומטית בתגובה לאירוע בטבלה, כמו הוספה, עדכון או מחיקה של שורה.

הוספת שורה לטבלה למתקדמים - Insert
ההרצאה מסבירה את פקודת INSERT ב-SQL Server: הוספה דרך ממשק גרפי, הוספה בפקודות, ערכי ברירת מחדל, טבלאות זמניות, הכנסה מתוך טבלה אחרת, עמודת Identity והפלט של הוספה.
הוספה דרך ממשק גרפי ופקודות
1. ממשק גרפי: הממשק בונה פקודות SQL ושולח אותן לשרת. בעמודת Identity אי אפשר להזין ערך ידני, כי המספור נעשה אוטומטית. עמודה שאינה מסומנת כ-Allow Nulls חייבת לקבל ערך.
2. INSERT INTO ... VALUES: מציינים את שם הטבלה, את העמודות ואת הערכים. אפשר להוסיף כמה שורות בפקודה אחת, מופרדות בפסיק. השרת מחזיר את מספר השורות שהוכנסו.
3. אינדקס ייחודי: אינדקס unique מונע כפילות של זוגות ערכים. ניסיון להכניס זוג כפול נדחה עם הודעת שגיאה.
4. Identity Insert: אי אפשר להכניס ערך מפורש לעמודת Identity, אלא אם מכבים את האפשרות זמנית בעזרת SET IDENTITY_INSERT. לאחר ההכנסה מחזירים את האפשרות ל-off. המספור ממשיך מהערך הגבוה ביותר, גם כשההכנסה המפורשת מנותקת.
ערכי ברירת מחדל וטבלאות זמניות
5. Default: עמודה עם ערך ברירת מחדל מתמלאת אוטומטית כשלא ניתן ערך. בהרצאה נוספה ברירת מחדל getdate() לעמודת תאריך התחלת עבודה. כדי להפוך את העמודה לחובה, נדרש לתקן קודם שורות ריקות.
6. טבלה זמנית: טבלה שמתחילה ב-# נוצרת לסשן הנוכחי בלבד. SELECT ... INTO #tbl WHERE 1=2 יוצר טבלה ריקה עם מבנה זהה לטבלה המקורית.
7. INSERT ... SELECT: הכנסה מתוך שאילתה. השורות נבחרות מטבלה אחרת ומוכנסות ישירות.
פלט ומזהה אחרון
8. OUTPUT: בתוך פקודת INSERT, OUTPUT מחזיר את הערכים שהוכנסו לתוכנה או לטבלת לוג. הטבלה הזמנית inserted מכילה את השורות שמוכנסות כרגע.
9. SCOPE_IDENTITY ו-@@IDENTITY: SCOPE_IDENTITY() מחזיר את הערך האחרון שהוכנס על ידי הפקודה בסשן שלה. @@IDENTITY עלול להחזיר ערך מטבלה אחרת, למשל טבלה שהופעלה דרך טריגר. בטבלת הלוג בהרצאה עמודת המזהה הועתקה כערך רגיל, ולא נוצרה מחדש.
שימו לב
כשמספר משתמשים מכניסים נתונים במקביל, המזהה שמוחזר עלול להתייחס לשורה של משתמש אחר. ההרצאה מציינת שהפתרון הוא טרנזקציות ורמות בידוד (isolation levels), שנלמדות בהרצאה נפרדת.
השיעור הבא בקורס: כתיבת SCRIPT ב-SQL

פרקי ההרצאה: הוספת שורה לטבלה למתקדמים - Insert

  1. 00:00

    הוספת שורה דרך הממשק הגרפי

  2. 00:40

    עמודת Identity שסופרת לבד

  3. 03:17

    Check Constraint לבדיקת תקינות ערכים

  4. 04:16

    הוספת שורות עם פקודות INSERT

  5. 07:04

    אינדקס Unique למניעת כפילויות

  6. 08:33

    ערכי ברירת מחדל ל-DEFAULT ו-getdate

  7. 11:36

    טבלה זמנית לשמירת חישובים

  8. 14:29

    INSERT מתוך SELECT לטבלה זמנית

תמלול ההרצאה: הוספת שורה לטבלה למתקדמים - Insert

הטקסט המלא של הדקות הראשונות בהרצאה «הוספת שורה לטבלה למתקדמים - Insert» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:20

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

  3. 00:42

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

  4. 01:10

    איזושהי שורה זה לא מעניין אותו הוא תמיד סופר קדימה אז השירות כזה של אדנטיטי בגלל זה אני לא יכול פה להכניס employee ID כי הוא סופר לי לבד הלאה last name זה עמודה שאני יכול להכניס לה ערך בוא ננסה להכניס לה ערך לדוגמה פרקטיק U בן אדם שקוראים לו פרקטיק U הגיע אלינו לעבוד ואם אנחנו מנסים עכשיו לעלות לשורה אחרת או להכניס עוד ערך, לרדת שורה להכניס עוד ערך,

  5. 01:41

    הוא אומר שהוא לא מוכן. הוא אומר אני לא מוכן לעדכן את הטבלה הזאת, כי בטבלת employees אתה לא יכול להכניס ערך null לעמודה first name. אתה לא יכול להכניס ערך null, null זה ריק, לדלג על עמודה שנקראת first name.

  6. 01:58

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

  7. 02:13

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

  8. 02:28

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

  9. 02:55

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

  10. 03:20

    לציין לו את העמודה הזאת הוא לא נותן לי למה כי אני חייב לציין עכשיו שימו לב אין לו בדיקה אני יכול לעבוד עליו אני יכול לעשות לו אה אה אה הוא לא מספיק חכם אפשר לשים לו אילוץ אילוצים ולעשות לו בדיקה על העמודה הזאת אבל בינתיים אין את זה אז אפשר לעבוד עליו ולהכניס לו סתם

  11. 03:40

    ערכים לא נכונים הוא לא יודע לעלות על זה אבל זה אחד הדברים שאיש dba צריך לעשות לעשות על העמודות עוד בדיקות חוץ מאלאו נאל אז הנאל הזה מגן נגד זה שאני אשכח אבל לא יותר מזה הוא לא יודע לבדוק נכונות בשביל זה יש check constraint שיודע לבדוק את זה מצוין ראינו איך מכניסים בגרפים ושמתם לב שזה לא התחיל מ-10,

  12. 04:04

    יש פה דילוג. למה? כי מחקתי כמה שורות לפני כן. עכשיו אני מוחק את שלושת אלו, נמחק את שלושת השורות האלו וגם נחזיר פה שזה שדה לא יהיה חובה, שיהיה לי יותר קל, יופי.

  13. 04:18

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

  14. 04:33

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

  15. 04:49

    אז כל מה שאני כותב או עושה בממשק גרפי בסוף בסוף זה פקודות sql שהקליינט הזה, התוכנה הזאת שולחת לשרת SQL Server שאני גם השרת על המחשב הזה יש לי גם שרת וגם קליינט אז למעשה הקליינט התוכנה הזאת שולחת לשרת הזה את הפקודות SQL וזה אחד מהקליינטים יש המון קליינטים שיודעים ככה בגרפי להפוך אותם לפקודות ואנחנו ממשיכים לתוך insert values בואו נעשה את זה בפקודה אנחנו עושים עכשיו אותו דבר רק בפקודות

  16. 05:25

    אנחנו מכניסים לתוך טבלה שנקראת employees ואז זה שם המלא של הטבלה, שם של היוזר שיצר אותה, נקודה השם שלה, שזה גם נקרא סכמה, אבל כרגע זה לא מעניין, אז אנחנו נותנים את השם המקוצר, כי אצלי כל הטבלאות הן מאותו שם וגם זה ה-Default אצלי. בואו נעשה Insert Employees ונגיד

  17. 05:45

    שאנחנו רוצים להכניס ערכים לשתי עמודות. לאיזה עמודות? לעמודות שאנחנו חייבים להכניס עליהם ערכים, מה שנקרא Not Null. שימו לב, Employee ID אני לא יכול אגד, הוא ייתן לי שגיאה אם אני אנסה להכניס.

  18. 06:00

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

  19. 06:14

    הבן אדם הראשון, שם משפחה שלו יהיה פרקטי קיו, ושם הפרטי שלו יהיה יונתן, ואנחנו מכניסים אותו לתוך טבלת employees. מקבלים הודעה פה one row effected, זה אומר שטופלה שורה אחת ואני יכול גם לעשות פסיק וישר להכניס שני שורות בבקשה אני מכניס שתי שורות פרקטיקיו יונתן ופרקטיקיו ליזה זה לא באמת שמשפחה פרקטיקיו אנחנו עושים אינסרט

  20. 06:42

    ועכשיו שני שורות נכנסו ביחד בוא נסתכל לתוך הטבלה שלנו אנחנו נעשה סלקט כוכבית from employees ונסתכל בתוך הטבלה שלנו אנחנו רואים כאן שיש לנו מפעם ראשונה שהרצנו את זה ומפעמיים הבאות שהרצנו אז יש לנו פעמיים אותו עובד שימו לב יש פה בעיה שדאטאבייס לא יודע לאבחן שני אנשים עם אותו שם ונותן לזה להיכנס

  21. 07:13

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

  22. 07:35

    כן הוא נותן הודעת שגיאה בואו ננסה לעשות טעות ולהכניס פה ערך שאסור לי נניח אני אעשה פה 1 פסיק אתם יודעים מה שהוא לא יגיד שיש 1 כבר 99 ו-98 סתם דוגמא הסדר פה לא משנה אני אפילו לא צריך את זה, אני מכניס עוד פעם את יונתן ב-99 והוא אומר לי, cannot insert explicit value into identity column

  23. 08:05

    אתה לא יכול להכניס ערכים מפורשים, מה שבא לך, לתוך identity column אני אספר לכם סוד, הוא נותן פה רמס שאפשר זמנית לכבות את ה-identity הזה לכבות אותו, להכניס מה שבא לי ואחרי זה להדליק אותו זה שירות שבא לעזור לך, זה לא משהו שמכריח, אבל אם הוא פועל אז הוא שולט

  24. 08:23

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

  25. 08:44

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

  26. 09:04

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

  27. 09:19

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

  28. 09:36

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

  29. 09:44

    נריץ עוד פעם את הפקודה, נקבל פעם שלישית אותו עובד לעבודה ונראה Select כוכבית From Employees ואנחנו רואים כאן שבעובד האחרון שימו לב נכנס כבר ערך.

  30. 10:02

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

  31. 10:36

    לחזור לטבלת employees לעשות design ועכשיו ב higher date אני כן יוכל לחסום אפשרות להיות ריק. הנה הוא נתן לי. הוא נתן לי בגלל שאין שורות שמפירות את החוק הזה.

  32. 10:50

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

  33. 11:07

    אז עשינו insert עם default. default זה אומר שאני לא אומר משהו והוא לבד מכניס לי תאריך. שימו לב, הוא לבד מכניס לי תאריך כי יש לו ערך defaulty, ערך ברירת מחדל.

  34. 11:22

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

  35. 11:46

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

  36. 12:00

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

  37. 12:16

    אז בואו נעשה טבלת עזר עם אותן עמודות כמו employees. אני אלמד אתכם טריק. Select כוכבית from employees מראה לי את הכל.

  38. 12:25

    מחמישה עובדים ראשונים אני רוצה לקחת רק last name ו-birthday, אוקיי? רק שתי עמודות. ואת כל זה אני רוצה להכניס לתוך טבלה זמנית. בואו נעשה קודם כל טבלה זמנית.

  39. 12:41

    Select כוכבית From Employees, נכון? תבחר את כל ה-employees, אבל תכניס את כל זה לתוך טבלה זמנית. הטבלה הזמנית נמצאת רק בזיכרון של המחשב ורק ליוזר שלי.

  40. 13:00

    אני קורא לזה EmployeeTemps, שימו לב, היא תמיד מתחילה בסולמית. ואני אומר לו, תקשיב, המבנה שלה זה בדיוק כמו המבנה של טבלת Employees.

  41. 13:09

    זאת אומרת, Select הזה נותן לי את כל העובדים. אם אני מוסיף פה into שם טבלה אחרת הוא בונה לי טבלה אחרת ונוצרת לי טבלה עם כל העובדים אבל אני רוצה רק את המבנה שלה אז אני אומר רק שורות שבהם 1 שווה 2 ברור שאין אף שורה ש-1 שווה 2 ואז מה שנוצר לי זה טבלה זמנית ריקה שימו לב נוצרת לי טבלה זמנית ריקה 0 rows 0 שורות כי באף שורה 1 לא שווה ל-2 אבל העתקתי את המבנה

  42. 13:43

    ועכשיו יש לי מבנה של כל הטבלה, זמנית בזיכרון. מה זה אומר זמנית? זה אומר שאם אני פותח סשן אחר, אתם רואים, זה סשן 53. אם אני פותח סשן אחר, נניח 57, הוא כבר לא רואה את ה-employee Stamp הזה.

  43. 13:57

    ה-employee Stamp הזה, עם סולמית בהתחלה, זמין אך ורק בסשן 53. כמו טבלת עזר זמנית בזיכרון, ולמעשה היא לא באמת בזיכרון, היא נשמרת בדאטאבייס שנקרא טמפ, בדאטאבייס זמני, טמפ דאטאבייס, יושבת באמת בארדיסק אבל לי זה מספיק טוב בשביל

  44. 14:16

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

  45. 14:38

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

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: אובייקט Null עם פונקציות סכימה

ההרצאה הבאה: כתיבת SCRIPT ב-SQL

הרצאות קשורות מקורסים אחרים

  • Powershell למתקדמים
  • VLAN - למתקדמים
  • קבוצות למתקדמים
  • פרוטוקול ARP למתקדמים

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI