טרנזקציות (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 | המשך לאינדקסים →
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
מה מבטיחה טרנזקציה?
הצגת התשובה
תשובה א. העברת כסף: החיוב והזיכוי קורים יחד, או לא קורים בכלל.
-
מה עושה ROLLBACK?
הצגת התשובה
תשובה ד. COMMIT שומר, ROLLBACK מבטל.