شرح صفوف ومحتوى الفقرة
تتطلب العديد من العمليات الحساسة تنفيذ عدة استعلامات SQL مترابطة لا يصح نجاح بعضها وفشل البعض الآخر — مثل تحويل مبلغ مالي بين حسابين، أو إنشاء فاتورة طلب وخصم الكمية من المخزون. هنا تضمن المعاملة الذرية (Database Transaction) قاعدة الكل أو لا شيء (All-or-Nothing):
- خطر غياب المعاملة: إذا خُصم المبلغ من حساب المرسل في الاستعلام الأول، ثم وقع خطأ قبل إضافته لحساب المستلم في الاستعلام الثاني، ستتلف البيانات المالية!
- حماية المعاملة الذرية: إما أن تنجح جميع الاستعلامات معاً ويتم اعتمادها، أو يتم التراجع عنها جميعاً بالكامل عند وقوع أي عطل.
PHP
<?php
$pdo = new PDO("sqlite::memory:");
$pdo->exec("CREATE TABLE accounts (id INT, balance INT)");
$pdo->exec("INSERT INTO accounts VALUES (1, 500), (2, 200)");
// Check whether a transaction is currently active:
echo $pdo->inTransaction() ? "Active" : "Auto-commit mode";