English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي لـ PostgreSQL

دليل متقدم لـ PostgreSQL

واجهة PostgreSQL

معاملة (Transaction) PostgreSQL

TRANSACTION (معاملة) هي وحدة منطقية في عملية نظام إدارة قاعدة البيانات، تتكون من سلسلة محدودة من عمليات قاعدة البيانات.

تتضمن معاملات قاعدة البيانات عادة سلسلة من العمليات القراءة/كتابة للبيانات الأساسية. تشمل الغرضان التاليان:

  • يقدم طريقة للانتعاش من الفشل إلى حالة العادية لسلسلة عمليات قاعدة البيانات، ويقدم أيضًا طريقة لاستمرار توافق قاعدة البيانات حتى في حالة الطوارئ.

  • عندما يتم الوصول إلى قاعدة البيانات من قبل العديد من التطبيقات بشكل متزامن، يمكن تقديم طريقة عزل بين هذه التطبيقات لمنع التداخل بين عملياتها.

عندما يتم تقديم العملية للنظام الإداري للبيانات الأساسية (DBMS)، يجب على DBMS التأكد من أن جميع العمليات في هذه العملية تنجح وتتم حفظ النتائج بشكل دائم في قاعدة البيانات، إذا لم تنجح بعض العمليات في العملية، يجب رجوع جميع العمليات في العملية إلى حالة التشغيل السابقة للعملية؛ كما أن هذه العملية لا تؤثر على تشغيل قاعدة البيانات أو العمليات الأخرى، تبدو جميع العمليات كأنها تعمل بشكل مستقل.

خصائص العمليات

تتمتع العمليات بالعناصر الأربعة التالية، وتُعرف عادةً بأحرفها الأولى ACID:

  • الجزئية (Atomicity):تُنفيذ العملية ككل، ويجب أن يتم تنفيذ جميع العمليات التي تشملها، أو لا يتم تنفيذ أي منها.

  • التناسق (Consistency):يجب أن تضمن العملية أن تكون حالة قاعدة البيانات من الحالة المتناسقة إلى الحالة المتناسقة الأخرى. تعني حالة التناسق أن يجب أن تكون بيانات قاعدة البيانات مطابقة للالتزامات الكاملة.

  • التباين (Isolation):عند تنفيذ عدة عمليات بشكل متوازي، لا يجب أن يؤثر تنفيذ عملية واحدة على تنفيذ عملية أخرى.

  • الاستمرارية (Durability):يجب أن يتم حفظ التغييرات التي تم إجراؤها من قبل العملية المقدمة بشكل دائم في قاعدة البيانات.

مثال

يجب على شخص ما استخدام العملة الإلكترونية في المتجر لشراء شيء قدره 100 يوان، ويجب أن يشمل هذا العمل على الأقل عمليةين:

  • تقليل حساب الشخص بنسبة 100 يوان.

  • زيادة حساب المتجر بنسبة 100 يوان.

يهدف نظام إدارة قاعدة البيانات الذي يدعم العمليات إلى التأكد من أن هذين العملين (العملية بأكملها) يمكن إكمالهما، أو إلغاءهما معًا، وإلا يمكن أن يحدث فقدان 100 يوان أو ظهور.

تحكم في العملية

استخدم الأوامر التالية للتحكم في العملية:

  • BEGIN TRANSACTIONالبداية.

  • COMMITالتأكيد على العملية، أو يمكن استخدام الأمر END TRANSACTION.

  • ROLLBACKالعودة إلى الحالة السابقة.

أوامر التحكم في العملية تستخدم فقط مع INSERT و UPDATE و DELETE. لا يمكن استخدامها عند إنشاء جدول أو حذف جدول، لأن هذه العمليات يتم التحقق منها تلقائيًا في قاعدة البيانات.

أمر BEGIN TRANSACTION

يمكن استخدام الأمر BEGIN TRANSACTION أو الأمر البسيط BEGIN لبدء العملية. عادةً ما تستمر هذه العملية في التنفيذ حتى وصول الأمر التالي COMMIT أو ROLLBACK. ومع ذلك، يمكن أن يتم إلغاء عملية التعامل عند إغلاق قاعدة البيانات أو حدوث خطأ. إليك نص بسيط لبدء عملية:

BEGIN;
أو
BEGIN TRANSACTION;

أمر COMMIT

أمر COMMIT هو الأمر المستخدم لحفظ التغييرات التي تم إجراءها من قبل الاستدعاءات العملية في قاعدة البيانات، أي تأكيد العملية.

نص الأمر COMMIT كالتالي:

COMMIT;
أو
END TRANSACTION;

أمر ROLLBACK

أمر ROLLBACK هو الأمر المستخدم لسحب الأوامر التي لم يتم حفظها في قاعدة البيانات بعد، أي عودة العملية.

نص الأمر ROLLBACK كالتالي:

ROLLBACK;

مثال على الخطوة

إنشاء جدول COMPANY (تحميل ملف SQL لـ COMPANY )، محتوى البيانات كالتالي:}

w3codeboxdb# select * from COMPANY;
 id | name  | age | address     | salary
----+-------+-----+-----------+--------
  1 | Paul  | 32 | California   | 20000
  2 | Allen | 25 | Texas         | 15000
  3 | Teddy | 23 | Norway       | 20000
  4 | Mark  | 25 | Rich-Mond    | 65000
  5 | David | 27 | Texas         | 85000
  6 | Kim   | 22 | South-Hall   | 45000
  7 | James | 24 | Houston       | 10000
(7 أسطر)

الآن، دعونا نبدأ في معاملة جديدة، لإزالة السجلات التي age = 25 من الجدول، وأخيرًا نستخدم الأمر ROLLBACK لسحب جميع التغييرات.

w3codeboxdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

تحقق من جدول COMPANY، لا تزال تحتوي على السجلات التالية:

 id | name  | age | address     | salary
----+-------+-----+-----------+--------
  1 | Paul  | 32 | California   | 20000
  2 | Allen | 25 | Texas         | 15000
  3 | Teddy | 23 | Norway       | 20000
  4 | Mark  | 25 | Rich-Mond    | 65000
  5 | David | 27 | Texas         | 85000
  6 | Kim   | 22 | South-Hall   | 45000
  7 | James | 24 | Houston       | 10000

الآن، دعونا نبدأ في معاملة جديدة، لإزالة السجلات التي age = 25 من الجدول، وأخيرًا نستخدم الأمر COMMIT لتقديم جميع التغييرات.

w3codeboxdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

تحقق من جدول COMPANY، السجلات تم حذفها:

id | name  | age | address     | salary
----+-------+-----+------------+--------
  1 | Paul  | 32 | California   | 20000
  3 | Teddy | 23 | Norway       | 20000
  5 | David | 27 | Texas         | 85000
  6 | Kim   | 22 | South-Hall   | 45000
  7 | James | 24 | Houston       | 10000
(5 أسطر)