טרנזקציות (Transactions)

מה זה טרנזקציה?

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


עקרונות ACID

עיקרון הסבר
Atomicity אטומיות - הכל או כלום
Consistency עקביות - המערכת תמיד במצב תקין
Isolation בידוד - טרנזקציות לא מפריעות זו לזו
Durability עמידות - שינויים נשמרים לצמיתות

תחביר בסיסי

-- התחלת טרנזקציה
START TRANSACTION;
-- או
BEGIN;

-- ביצוע פעולות
INSERT INTO ...
UPDATE ...
DELETE ...

-- אישור - שמירת השינויים
COMMIT;

-- או ביטול - החזרת המצב
ROLLBACK;

דוגמה: העברת כסף

-- העברת 100₪ מחשבון A לחשבון B
START TRANSACTION;

-- הורדה מחשבון A
UPDATE accounts 
SET balance = balance - 100 
WHERE id = 'A';

-- הוספה לחשבון B
UPDATE accounts 
SET balance = balance + 100 
WHERE id = 'B';

-- אם הכל הצליח - אישור
COMMIT;

מה קורה אם יש שגיאה?

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 'A';

-- שגיאה! חשבון B לא קיים
UPDATE accounts SET balance = balance + 100 WHERE id = 'B';  -- נכשל

-- ביטול - הכסף חוזר לחשבון A
ROLLBACK;

SAVEPOINT - נקודות שמירה

START TRANSACTION;

INSERT INTO orders (user_id, total) VALUES (1, 100);
SAVEPOINT order_created;

INSERT INTO order_items (...) VALUES (...);
-- שגיאה בפריט

ROLLBACK TO order_created;  -- חוזרים רק עד הנקודה
-- ההזמנה עדיין קיימת

COMMIT;

רמות בידוד (Isolation Levels)

-- הגדרת רמת בידוד
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

-- רמות זמינות:
-- READ UNCOMMITTED - הכי מהיר, הכי פחות בטוח
-- READ COMMITTED - ברירת מחדל ברוב מסדי הנתונים
-- REPEATABLE READ - קריאות חוזרות נותנות אותו תוצאה
-- SERIALIZABLE - הכי בטוח, הכי איטי

AUTO COMMIT

-- MySQL: כברירת מחדל כל פקודה היא טרנזקציה נפרדת
SET autocommit = 0;  -- כיבוי
SET autocommit = 1;  -- הפעלה

← UPDATE ו-DELETE | המשך לאינדקסים →

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה מבטיחה טרנזקציה?

    1. שכל הפעולות בה יתבצעו יחד, או ששום אחת לא
    2. מהירות
    3. גיבוי
    4. הצפנה
    הצגת התשובה

    תשובה א. העברת כסף: החיוב והזיכוי קורים יחד, או לא קורים בכלל.

  2. מה עושה ROLLBACK?

    1. מוחק את הטבלה
    2. מתחיל טרנזקציה
    3. שומר את השינויים
    4. מבטל את כל השינויים מתחילת הטרנזקציה
    הצגת התשובה

    תשובה ד. COMMIT שומר, ROLLBACK מבטל.