شرح صفوف ومحتوى الفقرة
تُعرَّف المعاملة في قواعد البيانات (Database Transaction) بأنها وحدة عمل منطقية تجمع جملة SQL واحدة أو عدة جمل مترابطة بحيث تنجح جميعها معاً ككتلة واحدة أو تفشل جميعها دون ترك أي أثر جزئي يشوّه البيانات. لنفترض تحويل مبلغ 150.00 من الحساب رقم 101 إلى الحساب رقم 102؛ تتطلب هذه العملية خطوتين متلازمتين هما خصم المبلغ من المرسل وإضافته للمستقبل.
إذا انقطع الاتصال أو توقف الخادم بعد تنفيذ جملة الخصم الأولى وقبل تنفيذ جملة الإيداع الثانية دون غلاف معاملة ذرية، سيختفي المبلغ المخصوم من قاعدة البيانات وتفقد الأرصدة توازنها المحاسبي. تأمل تشريح بناء جدول الأرصدة المالية wallet_ledgers بمحرك InnoDB:
ENGINE=InnoDB: يحدد محرك التخزين الافتراضي في MySQL 8 الداعم للمعاملات الذرية وسجلات الاستعادة التلقائية.DECIMAL(10, 2) NOT NULL: يخزن الأرصدة المالية بدقة عشرية ثابتة تمنع أخطاء التقريب العشري.account_id INT PRIMARY KEY: ينشئ المفتاح الأساسي المتجمع الذي يعتمد عليه المحرك للوصول الفوري إلى صف الحساب المستهدف.INSERT INTO wallet_ledgers: يدرج الرصيدين الابتدائيين بمجموع كلي قدره1300.00يجب أن يظل ثابتاً قبل التحويل وبعده.
+------------+--------+---------+
| account_id | holder | balance |
+------------+--------+---------+
| 101 | Mona | 900.00 |
| 102 | Tariq | 400.00 |
+------------+--------+---------+
SQL
CREATE TABLE wallet_ledgers (
account_id INT PRIMARY KEY,
holder VARCHAR(60) NOT NULL,
balance DECIMAL(10, 2) NOT NULL
) ENGINE=InnoDB;
INSERT INTO wallet_ledgers VALUES (101, 'Mona', 900.00), (102, 'Tariq', 400.00);
SELECT account_id, holder, balance FROM wallet_ledgers;