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

معاملات SQLite

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

العملية هي نشر تغييرات واحدة أو أكثر إلى قاعدة البيانات. على سبيل المثال، إذا كنت ترغب في إنشاء، تحديث أو حذف سجلات في الجدول، فإنك ستقوم بتنفيذ عملية على الجدول. التحكم في العملية لضمان شمولية البيانات وتعامل الأخطاء في قاعدة البيانات مهم.

في الواقع، ستجمع العديد من استعلامات SQLite في مجموعة واحدة، وتجري تنفيذها كجزء من عملية.

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

تتمتع العملية بأربع خصائص رئيسية، وتُرمز إليها عادةً ببداية الحروف ACID.

  • التمزق (التمزق):تأكد من أن جميع العمليات داخل وحدة العمل تتم بنجاح، وإذا لم يتم ذلك، فإن العملية ستعود إلى الحالة السابقة عند حدوث خطأ.

  • التناسق (التناسق):تأكد من أن قاعدة البيانات تتغير بشكل صحيح على العملية التي تم تقديمها بنجاح.

  • التباين (التمييز):جعل عمليات العملية مستقلة وشفافة.

  • التمسك (الاستمرارية):تأكد من أن النتائج أو التأثيرات المقدمة من العملية تكون موجودة حتى في حالة فشل النظام.

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

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

  • BEGIN TRANSACTION −بدء العملية.

  • COMMIT−لحفظ التغييرات، يمكنك أيضًا استخدامEND TRANSACTIONالأمر.

  • ROLLBACK −إلغاء التغييرات.

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

أمر BEGIN TRANSACTION

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

BEGIN;
أو 
BEGIN TRANSACTION;

أمر COMMIT

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

منذ إصدار أمر COMMIT أو ROLLBACK الأخير، سيتم حفظ جميع المعاملات في قاعدة البيانات.

هنا هو بناء جملة الأمر COMMIT.

COMMIT;
أو
END TRANSACTION;

أمر ROLLBACK

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

منذ إصدار أمر COMMIT أو ROLLBACK الأخير، يمكن استخدام الأمر ROLLBACK فقط لسحب المعاملة.

هنا هو بناء جملة الأمر ROLLBACK.

ROLLBACK;

مثال على الإنترنت

جدول الشركة يحتوي على السجلات التالية.

ID                                     NAME                                         AGE                                         ADDRESS                                     SALARY
----------                            ----------                                    ----------                                    ----------                                    ----------
1                                     Paul                                         32                                         California                                     20000.0
2                                     Allen                                         25                                         Texas                                         15000.0
3                                     Teddy                                         23                                         Norway                                         20000.0
4                                     Mark                                         25                                         Rich-Mond                                     65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

الآن، دعونا نبدأ بمعاملة جديدة ونزيل السجلات من الجدول الذي يحتوي على عمرة 25. ثم نستخدم أمر ROLLBACK لإلغاء جميع التغييرات.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;

الآن، إذا كنت تقوم بالتحقق من جدول الشركة فإنه لا يزال يحتوي على السجلات التالية-

ID                                     NAME                                         AGE                                         ADDRESS                                     SALARY
----------                            ----------                                    ----------                                    ----------                                    ----------
1                                     Paul                                         32                                         California                                     20000.0
2                                     Allen                                         25                                         Texas                                         15000.0
3                                     Teddy                                         23                                         Norway                                         20000.0
4                                     Mark                                         25                                         Rich-Mond                                     65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

دعونا نبدأ بمعاملة جديدة ونزيل السجلات من الجدول الذي يحتوي على عمرة 25، ثم نستخدم أمر COMMIT لتحديث جميع التغييرات.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;

إذا كان يتم التحقق الآن من جداول الشركة فإنها لا تزال تحتوي على السجلات التالية-

ID                                     NAME                                         AGE                                         ADDRESS                                     SALARY
----------                            ----------                                    ----------                                    ----------                                    ----------
1                                     Paul                                         32                                         California                                     20000.0
3                                     Teddy                                         23                                         Norway                                         20000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0