**تراکنش (Transaction)** در پایگاه داده به مجموعهای از عملیاتهای مرتبط گفته میشود که به عنوان یک واحد منطقی اجرا میشوند. هدف اصلی تراکنشها، حفظ **یکپارچگی دادهها** و اطمینان از این است که پایگاه داده از یک حالت سازگار به حالت سازگار دیگری منتقل میشود، حتی در صورت بروز خطا یا خرابی سیستم.
—
### **ویژگیهای تراکنشها (ACID)**
تراکنشها در پایگاه داده باید چهار ویژگی اصلی به نام **ACID** را داشته باشند:
1. **اتمیبودن (Atomicity)**:
– تراکنش باید به عنوان یک واحد غیرقابل تقسیم در نظر گرفته شود.
– یا تمام عملیاتهای تراکنش با موفقیت انجام میشوند، یا هیچکدام انجام نمیشوند.
– مثال: اگر یک تراکنش شامل انتقال پول از حساب A به حساب B باشد، یا هر دو عملیات (کاهش از حساب A و افزایش به حساب B) انجام میشوند، یا هیچکدام انجام نمیشوند.
2. **سازگاری (Consistency)**:
– تراکنش باید پایگاه داده را از یک حالت سازگار به حالت سازگار دیگری منتقل کند.
– قوانین یکپارچگی دادهها باید در طول و پس از تراکنش رعایت شوند.
– مثال: پس از انتقال پول، مجموع موجودی حسابها باید ثابت بماند.
3. **انزوا (Isolation)**:
– تراکنشها باید به طور مستقل از یکدیگر اجرا شوند، گویی که به تنهایی در حال اجرا هستند.
– نتایج موقت یک تراکنش نباید برای تراکنشهای دیگر قابل مشاهده باشد.
– مثال: اگر دو تراکنش همزمان بخواهند موجودی یک حساب را تغییر دهند، نتیجه باید مانند حالتی باشد که آنها به صورت متوالی اجرا شدهاند.
4. **ماندگاری (Durability)**:
– پس از تکمیل موفقیتآمیز یک تراکنش، تغییرات باید به طور دائم در پایگاه داده ذخیره شوند.
– حتی در صورت خرابی سیستم، تغییرات نباید از بین بروند.
– مثال: پس از انتقال پول، تغییرات باید در پایگاه داده ذخیره شوند و در صورت قطع برق، اطلاعات از دست نروند.
—
### **مراحل یک تراکنش**
1. **شروع تراکنش (Begin Transaction)**:
– تراکنش با دستور `BEGIN TRANSACTION` شروع میشود.
2. **اجرای عملیاتها**:
– عملیاتهای مختلف مانند درج، بهروزرسانی یا حذف دادهها انجام میشوند.
3. **اتمام تراکنش**:
– اگر همه عملیاتها موفقیتآمیز باشند، تراکنش با دستور `COMMIT` تکمیل میشود و تغییرات ذخیره میشوند.
– اگر خطایی رخ دهد، تراکنش با دستور `ROLLBACK` لغو میشود و تغییرات اعمال نمیشوند.
—
### **مثال یک تراکنش**
فرض کنید میخواهید ۱۰۰ دلار از حساب A به حساب B انتقال دهید. مراحل تراکنش به صورت زیر است:
“`sql
BEGIN TRANSACTION;
— کاهش موجودی حساب A
UPDATE Accounts SET Balance = Balance – 100 WHERE AccountID = ‘A’;
— افزایش موجودی حساب B
UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = ‘B’;
— اگر همه عملیات موفقیتآمیز بودند
COMMIT;
— اگر خطایی رخ داد
ROLLBACK;
“`
—
### **مدیریت تراکنشها**
1. **نقاط ذخیره (Savepoints)**:
– امکان بازگشت به یک نقطه خاص در تراکنش را فراهم میکنند.
– مثال: `SAVEPOINT savepoint_name;` و `ROLLBACK TO savepoint_name;`.
2. **سطح انزوا (Isolation Level)**:
– تعیین میکند که تراکنشها چقدر از یکدیگر جدا باشند.
– سطوح انزوا شامل `READ UNCOMMITTED`, `READ COMMITTED`, `REPEATABLE READ`, و `SERIALIZABLE` هستند.
—
### **خطاها و بازیابی**
– اگر در حین اجرای تراکنش خطایی رخ دهد، سیستم باید بتواند تراکنش را به حالت قبل بازگرداند (Rollback).
– این کار با استفاده از **لاگهای تراکنش (Transaction Logs)** انجام میشود که تمام تغییرات را ثبت میکنند.
—
### **جمعبندی**
تراکنشها در پایگاه داده برای حفظ یکپارچگی دادهها و اطمینان از اجرای صحیح عملیاتها استفاده میشوند. با رعایت ویژگیهای ACID، تراکنشها تضمین میکنند که پایگاه داده همیشه در حالت سازگار باقی میماند. مدیریت صحیح تراکنشها برای سیستمهای حساس مانند بانکها، فروشگاههای آنلاین و سیستمهای مدیریت منابع سازمانی (ERP) بسیار مهم است.
دستهبندیها:
پایگاه داده
دیدگاه شما