ترنزکشن (Transaction) که در فارسی به آن «تراکنش» هم میگویند، مجموعهای از عملیات مرتبط روی دیتابیس است که باید مطابق قواعد اتمی بودن و سازگاری انجام شوند. در فروشگاه، ثبت سفارش و کم شدن موجودی ممکن است یک ترنزکشن منطقی واحد باشند.
ترنزکشن در SQL
START TRANSACTION;
UPDATE products SET stock = stock - 1
WHERE id = 42 AND stock > 0;
INSERT INTO orders (user_id, status) VALUES (7, 'pending');
COMMIT;
ترنزکشن در Laravel و Django
DB::transaction(function () use ($orderData) {
$order = Order::create($orderData);
OrderItem::create(['order_id' => $order->id, 'product_id' => 42]);
});
from django.db import transaction
with transaction.atomic():
order = Order.objects.create(customer_id=7)
OrderItem.objects.create(order=order, product_id=42)
ترنزکشن در C# و EF Core
await using var tx = await db.Database.BeginTransactionAsync();
// Update order and inventory.
await db.SaveChangesAsync();
await tx.CommitAsync();
اگر خطا قبل از Commit رخ دهد، عملیات باید به وضعیت سازگار بازگردد. اما API پرداخت خارجی بخشی از ترنزکشن محلی دیتابیس نیست. برای هماهنگی چند سرویس الگوهایی مانند Outbox و Saga مطرح میشوند.
همچنین اسید، رولبک، سطوح جداسازی تراکنش و ددلاک را بررسی کنید.