logo

עסקאות SQL

טרנזקציית SQL היא רצף של פעולות SQL אחת או יותר (למשל.INSERT UPDATE DELETE) מבוצע כיחידת עבודה אחת. עסקאות מבטיחות שכל הפעולות יצליחו או שאף אחת לא מיושמת תוך שמירה על שלמות הנתונים.

מאפייני מפתח של עסקאות SQL: ACID

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

  • אָטוֹמִיוּת: התוצאה של עסקה יכולה להיות מוצלחת לחלוטין או לא מוצלחת לחלוטין. יש להחזיר את כל העסקה לאחור אם חלק אחד שלה נכשל.
  • עֲקֵבִיוּת: עסקאות שומרות על הגבלות שלמות על ידי העברת מסד הנתונים ממצב חוקי אחד לאחר.
  • בידוד: עסקאות במקביל מבודדות אחת מהשנייה ומבטיחות את דיוק הנתונים.
  • עֲמִידוּת: לאחר ביצוע עסקה, השינויים שלה נשארים בתוקף גם במקרה של כשל במערכת.

פקודות בקרת עסקאות SQL

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



1. פקודת BEGIN TRANSACTION

הBEGIN TRANSACTIONהפקודה מסמנת את תחילתה של עסקה חדשה. כל הצהרות SQL שאחרי פקודה זו יהיו חלק מאותה טרנזקציה עד אCOMMIT אוֹ ROLLBACK הוא נתקל. פקודה זו לא מבצעת שינויים במסד הנתונים, היא רק מתחילה את העסקה.

תַחבִּיר:

BEGIN TRANSACTION transaction_name ;

דוגמה לעסקת SQL עם תרחיש העברה בנקאית

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

BEGIN TRANSACTION;  

-- Deduct 0 from Account A
UPDATE Accounts
SET Balance = Balance - 150
WHERE AccountID = 'A';

-- Add 0 to Account B
UPDATE Accounts
SET Balance = Balance + 150
WHERE AccountID = 'B';

-- Commit the transaction if both operations succeed
COMMIT;

אם מתרחשת שגיאה כלשהי, כגון בעיה ב-UPDATEשאילתה שבה תוכל להשתמשROLLBACKכדי לבטל את כל השינויים שבוצעו במהלך העסקה:

ROLLBACK;

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

BEGIN TRANSACTION TransferFunds;

2. COMMIT פיקוד

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

תַחבִּיר:

COMMIT;

דוּגמָה

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

תְפוּקָה' title=שולחן סטודנטים

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

DELETE FROM Student WHERE AGE = 20;  
COMMIT;

תְפוּקָה

תְפוּקָה' loading='lazy' title=תְפוּקָה

3. פקודת ROLLBACK

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

תַחבִּיר:

ROLLBACK;

דוּגמָה

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

DELETE FROM Student WHERE AGE = 20;  
ROLLBACK;

תְפוּקָה:

תְפוּקָה' loading='lazy' title=תְפוּקָה

4. פקודת SAVEPOINT

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

תַחבִּיר:

SAVEPOINT SAVEPOINT_NAME;

דוּגמָה

SAVEPOINT SP1;  
//Savepoint created.
DELETE FROM Student WHERE AGE = 20;
//deleted
SAVEPOINT SP2;
//Savepoint created.

תְפוּקָה:

תְפוּקָה' loading='lazy' title=תְפוּקָה

הֶסבֵּר:

מהדוגמה שלמעלה Sample table1 מחק את הרשומות האלה מהטבלה שבהן גיל = 20 ולאחר מכן החזר את השינויים במסד הנתונים על ידי שמירת נקודות שמירה. כאן SP1 הוא SAVEPOINT הראשון שנוצר לפני המחיקה. בדוגמה זו בוצעה מחיקה אחת. לאחר המחיקה שוב נוצר SAVEPOINT SP2. 

5. חזרה לנקודת SAVEPOINT

הROLLBACK TO SAVEPOINTהפקודה מאפשרת לנו להחזיר את העסקה לאחור לנקודת שמירה מסוימת ולבטל בפועל שינויים שבוצעו לאחר נקודה זו.

תַחבִּיר:

ROLLBACK TO SAVEPOINT SAVEPOINT_NAME;

דוּגמָה

המחיקה בוצעה, נניח ששינינו את דעתנו והחלטנו לחזור ל-SAVEPOINT שזיהינו כ-SP1 שהוא לפני המחיקה. אז במקרה זה הDELETEהפעולה בוטלה והעסקה מוחזרת למצב בו הייתה ב-SP1נקודת שמירה.

ROLLBACK TO SP1;  
//Rollback completed

תְפוּקָה:

תְפוּקָה' loading='lazy' title=תְפוּקָה

6. פקודת RELEASE SAVEPOINT

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

תַחבִּיר:  

המרת מספר שלם ל-Java מחרוזת
RELEASE SAVEPOINT SAVEPOINT_NAME;

דוּגמָה

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

RELEASE SAVEPOINT SP2; -- Release the second savepoint.

מדוע להשתמש בעסקאות בבנקאות?

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

סוגי עסקאות SQL

ישנם סוגים שונים של עסקאות המבוססות על אופיים והפעולות הספציפיות שהם מבצעים:

  • קרא עסקאות : משמש רק לקריאת הנתונים בדרך כלל עם SELECT שאילתות.
  • כתוב עסקאות : אלה כוללים שינוי הנתונים במסד הנתונים עם INSERT UPDATEאוֹDELETEפעולות.
  • עסקאות מבוזרות : עסקאות אלו משתרעות על מסדי נתונים מרובים ומבטיחות עקביות ביניהם.
  • עסקאות מרומזות : מופעל אוטומטית על ידי SQL Server עבור פעולות מסוימות.
  • עסקאות מפורשות : עסקאות בשליטה ידנית שבה המשתמש מתחיל ומסיים את העסקה באמצעותBEGIN TRANSACTION COMMITוROLLBACK.

ניטור ואופטימיזציה של עסקאות SQL

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

1. מנעולים למוניטור : עקוב אחר התנהגות נעילה והתאם שאילתות כדי למזער התנגשויות נעילה.

2. הגבלת היקף העסקה : הגבל את מספר השורות או הרשומות המושפעות מעסקה כדי להאיץ את העיבוד.

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

חידון מוצע חידון ערוך 5 שאלות

איזה מהתרחישים הבאים מתאר בצורה הטובה ביותר הפרה של המאפיין 'בידוד' ב-ACID?

  • א

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

  • ב

    שתי עסקאות הפועלות בו-זמנית קריאה וכתיבה לאותם נתונים המובילות לתוצאות לא עקביות.

  • ג

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

  • ד

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

הֶסבֵּר:

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

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

  • א

    בידוד

  • ב

    אָטוֹמִיוּת

  • ג

    עֲמִידוּת

  • ד

    עֲקֵבִיוּת

הֶסבֵּר:

Atomicity מבטיחה שכל הפעולות בתוך עסקה יושלמו בהצלחה; אחרת כל העסקה מבוטלת.

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

  • א

    עֲקֵבִיוּת

  • ב

    אָטוֹמִיוּת

  • ג

    עֲמִידוּת

  • ד

    בידוד

הֶסבֵּר:

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

מהי המטרה העיקרית של פקודת 'SAVEPOINT' בעסקה?

  • א

    לבצע חלק מהעסקה.

  • ב

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

  • ג

    כדי לשמור לצמיתות את מצב העסקה.

  • ד

    כדי לסיים את העסקה ולהפוך את כל השינויים לצמיתות.

הֶסבֵּר:

'SAVEPOINT' מאפשר החזרה חלקית בתוך עסקה.

שקול את העסקה הבאה: 'התחל את העסקה; INSERT ...; נקודת שמירה א'; עדכון ...; SAVEPOINT B; מחק ...; חזרה לנקודת שמירה א';' מה מצב העסקה לאחר הפקודה 'ROLLBACK'?

  • א

    כל העסקה מבוטלת.

  • ב

    רק ה-'DELETE' בוטל.

  • ג

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

  • ד

    ה-'INSERT' נשמר אבל ה'עדכון' וה-'DELETE' בוטלו.

הֶסבֵּר:

חזרה ל-'SAVEPOINT A' מבטלת את כל השינויים שבוצעו לאחר אותה נקודת שמירה, שהם 'עדכון' ו'מחק'.

עסקאות SQLהחידון הסתיים בהצלחה הציון שלך:  2/5דיוק: 0%התחבר כדי להציג הסבר 1/5 1/5 < Previous הבא >