PracticU

טריגר רק על עמודה אחת

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › טריגר רק על עמודה אחת
מילון מושגים:
טריגר - קוד במסד נתונים שמופעל אוטומטית בתגובה לאירוע בטבלה, כמו הוספה, עדכון או מחיקה של שורה.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
תבנית - מבנה בסיסי מוכן שממנו יוצרים פריטים דומים, כמו תבנית עמוד או תבנית מסמך.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
Join - פעולת SQL שמשלבת שורות משתי טבלאות או יותר על בסיס קשר ביניהן.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.

טריגר רק על עמודה אחת
בשיעור מראים איך לכתוב טריגר שמופעל רק כשעמודה מסוימת בטבלה משתנה, ואיך משתמשים בטבלאות inserted ו-deleted כדי לתעד את השינוי.
השלבים העיקריים
1. המטרה: כשמחליפים שם משפחה בטבלת העובדים, רוצים לשלוח התראה למנהל. טבלת ההתראות כוללת עמודה אחת מסוג nvarchar, ומערכת אחרת קוראת ממנה ומוחקת את מה שנשלח.
2. יצירת טריגר: פותחים New Trigger, שמציג תבנית, ומגדירים את שם הטריגר, הטבלה הנצפית וסוג הפעולה. בדוגמה נבחר רק UPDATE.
3. SET NOCOUNT ON: מונע החזרת מספר השורות שהושפעו, שעלול להפריע לאפליקציה.
4. בדיקת עמודה: הפונקציה UPDATE(LastName) מחזירה אמת רק אם העמודה נכללה בפקודת העדכון. כך הטריגר רץ רק על שינוי שם משפחה.
5. inserted ו-deleted: בתוך הטריגר קיימות שתי טבלאות זמניות. inserted מכילה את הערכים החדשים, ו-deleted את הישנים. הן קיימות רק בזמן הטריגר.
6. יצירת ההודעה: מצרפים את שתי הטבלאות ב-JOIN, ומכניסים לטבלת ההתראות טקסט שמכיל את השם הישן ואת השם החדש.
7. בדיקה: עדכון של שם משפחה יוצר התראה. עדכון של שם פרטי לא יוצר התראה, כי התנאי לא מתקיים.
איך זה עובד
AFTER ו-FOR הם מילים נרדפות, והטריגר רץ אחרי פקודת העדכון. INSTEAD OF מחליף את הפעולה המקורית: בהרצאה הפקודה עודכנה רק בטבלת ההתראות, והטבלה המקורית לא השתנתה.
טעויות נפוצות
- טריגר INSTEAD OF שלא מבצע את העדכון בעצמו משאיר את הטבלה המקורית ללא שינוי.
- טבלאות inserted ו-deleted לא זמינות מחוץ לטריגר.
שימו לב
INSTEAD OF שימושי גם על View שיש לו כמה טבלאות או פונקציות צבירה, שאי אפשר לעדכן ישירות, כשרוצים לאפשר עדכון בדרך מבוקרת.
השיעור הבא בקורס: SQL Debugger

פרקי ההרצאה: טריגר רק על עמודה אחת

  1. 00:00

    טריגר שמופעל רק כשעמודה משתנה

  2. 00:49

    יצירת טבלת התראות לדוגמה

  3. 01:30

    יצירת טריגר חדש מתבנית

  4. 02:07

    הגדרת הטריגר על פקודת UPDATE

  5. 03:04

    תנאי: האם עמודת שם המשפחה השתנתה

  6. 04:01

    שימוש בטבלאות inserted ו-deleted

  7. 04:45

    חיבור הערך הישן והחדש לשורה אחת

  8. 05:25

    כתיבת ההודעה לטבלת ההתראות

תמלול ההרצאה: טריגר רק על עמודה אחת

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

  1. 00:03

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

  2. 00:22

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

  3. 00:49

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

  4. 01:13

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

  5. 01:42

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

  6. 01:57

    נותנים לו איזשהו שם לטריגר, כותבים on על איזה טבלה הוא יישב, על איזה טבלה הוא יסתכל, אז אחרי, זה אחרי פעולה, איזה פעולה, insert, update או delete, אנחנו רוצים רק על פקודת ה-update, יכולנו לעשות insert, pseek, update, אנחנו רוצים כרגע רק על פעולה של delete, רק על פעולה של update, set no count on אומר שאל תראה לי כמה שורות

  7. 02:33

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

  8. 02:56

    זו פונקציה שמקבלת שם עמודה ומחזירה true או false, כן, 1 או 0, אם העמודה הזאת השתנתה. איזה עמודה השתנתה? נניח אני רוצה רק last name.

  9. 03:10

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

  10. 03:45

    אנחנו עושים סלקט, ושימו לב, אנחנו עושים insert עם select. החלנו אחרי ה-insert לפרט עמודות בסוגריים, אנחנו עושים select, ושימו לב, יש לנו שתי טבלאות, inserted ו-deleted.

  11. 04:11

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

  12. 04:30

    זאת אומרת, בזמן הטריגר באמצע הביצוע של הפקודה, קיימת לנו הטבלה inserted וdeleted, מידע ישן ומידע חדש. יופי.

  13. 04:47

    עכשיו אנחנו עשינו join, ויצר לנו שורה אחת שכוללת גם את המידע הישן וגם את המידע החדש, ואנחנו יכולים לעשות המידע החדש, i זה ה-inserted ו-d זה ה-deleted, ואנחנו עושים טקסט אחד ארוך, סטרינג אחד ארוך, שנכנס לתוך עמודת נוטיפיי היחידה שהייתה.

  14. 05:15

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

  15. 05:42

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

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

ההרצאה הקודמת: יצירת טריגר Trigger instead of

ההרצאה הבאה: SQL Debugger

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

  • העלאת מספר רב של קבצים במכה אחת לאתר ב-NodeJS
  • הסבר על Eager Loading - טעינת כל המידע עם שאילתה אחת

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

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