תאר עסקאות
טרנזקציה היא משפט T-SQL אחד או יותר מטופלים כיחידת. אם טרנזקציה בודדת נכשלת, כל המשפטים נכשלים. אם טרנזקציה הצליחה, אתה יודע שכל משפטי שינוי הנתונים בטרנזקציה הצליחו וחויבו למסד הנתונים.
טרנזקציות מבטיחות שכל המשפטים בתוך טרנזקציה מצליחים או כולם נכשלים, ולא מותרת השלמה חלקית. טרנזקציות מקודדות פעולות שיש לבצע לוגית יחד, כגון ערכים מרובים בטבלאות קשורות שהם חלק מפעולה בודדת.
שקול עסק המאחסן רכישות בטבלה Sales.Order ות תשלומים בטבלה Sales.Payment . כאשר מישהו קונה משהו, יש לעדכן את שתי הטבלאות. אם פעולה זו מיושמת ללא טרנזקציות, ומתרחשת שגיאה כאשר התשלום נכתב במסד הנתונים, ההוספה Sales.Order עדיין תתבצע, ותותתן לטבלת התשלום ללא ערך.
כאשר אפשרות זו מיושמת באמצעות טרנזקציות, שני הערכים נוצרים או שלא נוצר אף ערך. אם אירעה שגיאה בכתיבת התשלום לטבלה, גם הוספת ההזמנה תוחזר למצב קודם. משמעות הדבר היא שמסד הנתונים נמצא תמיד במצב עקבי.
יצוין כי פעולה זו מתייחסת לשגיאות חמורות, כגון שגיאות חומרה או רשת. שגיאות במשפטי SQL רק עשויות לגרום לטרנזקציה לחזור למצב קודם בנסיבות מסוימות, וחשוב לסקור את היחידות הבאות במודול זה כדי להבין באופן מלא את ההשלכות של השימוש בטרנזקציות.
קיימים סוגים שונים של טרנזקציות:
טרנזקציות מפורשות
מילות המפתח BEGIN TRANSACTION ו- COMMIT או חזרה למצב קודם מתחילות ומסתיים כל אצווה של משפטים. פעולה זו מאפשרת לך לציין אילו משפטים חייבים להיות מחויבים או מוחזרים יחד.
עסקאות משתמעות
טרנזקציה מופעלת לאחר השלמת הטרנזקציה הקודמת. כל טרנזקציה הושלמה במפורש עם משפט COMMIT או חזרה למצב קודם.
מאפייני ACID
מערכות עיבוד טרנזקציות מקוונות (OLTP) דורשות טרנזקציות כדי לעמוד במאפיינים "ACID":
- Atomicity – כל טרנזקציה מטופלת כיחידת יחיד, המצליחה לחלוטין או נכשלת לחלוטין. לדוגמה, עסקה שמעורבת בחיוב כספים מחשבון אחד ותן אותה סכום לחשבון אחר חייבת להשלים את שתי הפעולות. אם לא ניתן להשלים אחת מהפעולות, הפעולה האחרת חייבת להיכשל.
- עקביות – טרנזקציות יכולות להעביר רק את הנתונים במסד הנתונים ממדינה חוקית אחת לאחרת. כדי להמשיך את הדוגמה לחיוב והאשראי לעיל, המצב שהושלם של העסקה חייב לשקף את העברת הכספים מחשבון אחד לחשבון אחר.
- בידוד – טרנזקציות בו-זמניות אינן יכולות להפריע זו לזו, והן חייבות להוביל למצב עקבי של מסד נתונים. לדוגמה, בעוד שהעסקה להעברת כספים מחשבון אחד לחשבון אחר מתבצעת בתוך התהליך, טרנזקציה אחרת שבוחן את היתרה בחשבונות אלה חייבת להחזיר תוצאות עקביות - לטרנזקציה של בדיקת היתרה אין אפשרות לאחזר ערך עבור חשבון אחד המשקף את היתרה לפני ההעברה, וערך עבור החשבון האחר המשקף את היתרה לאחר ההעברה.
- עמידות – כאשר עסקה מבוצעת, היא תישאר מחויבת. לאחר שטרנזקציית העברת החשבון הושלמה, יתרות החשבון המתוקנות עקביות כך שאפילו אם מערכת מסד הנתונים היתה כבויה, הטרנזקציה המחויבת תשתקף כאשר היא מופעלת שוב.