الفرق بين المراجعتين لصفحة: «SQL/transactions»
لا ملخص تعديل |
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}' |
||
سطر 102: | سطر 102: | ||
* [https://www.postgresql.org/docs/8.3/static/tutorial-transactions.html شرح العمليات في الموقع الرسمي لمحرك PostgreSQL] | * [https://www.postgresql.org/docs/8.3/static/tutorial-transactions.html شرح العمليات في الموقع الرسمي لمحرك PostgreSQL] | ||
* [https://docs.oracle.com/database/121/CNCPT/transact.htm#CNCPT1118 شرح العمليات في الموقع الرسمي لمحرك Oracle] | * [https://docs.oracle.com/database/121/CNCPT/transact.htm#CNCPT1118 شرح العمليات في الموقع الرسمي لمحرك Oracle] | ||
[[تصنيف:SQL]] | [[تصنيف:SQL|{{SUBPAGENAME}}]] | ||
[[تصنيف:SQL Transactions]] | [[تصنيف:SQL Transactions|{{SUBPAGENAME}}]] |
المراجعة الحالية بتاريخ 15:42، 28 يناير 2018
العملية هي مجموعة من التعديلات التي تتم في قاعدة البيانات وفق تسلسل منطقي، وينتج عنها بعض التغييرات في القاعدة كحذف سجل أو تعديل بيانات أو إنشاء سجل جديد، هذه كلها عبارة عن عمليات، وتصبح هذه التغييرات جزءًا دائمًا من قاعدة البيانات إذا نُفذَّت بشكل تامّ دون أخطاء، أما في حال حدوث أيّ خطأ فيُتراجَع عن هذه التغييرات وتعود قاعدة البيانات كما هي قبل إنجاز العمليات عليها.
التحكم بالعمليات
توجد أربعة أوامر للتحكم بالعمليات وهي:
COMMIT
: لحفظ التغييراتROLLBACK
: للتراجع عن التغييرات واستعادة البيانات بحالتها السابقة.SAVEPOINT
: لإنشاء نقاط استعادة ضمن مجموعات العمليات بهدف إمكانية التراجع واستعادة البيانات.SET TRANSACTION
: لتسمية العملية.
مثال
إذا كان الجدول الآتي customers
موجودًا في قاعدة البيانات:
Bill | OrderID | FullName | CustomerID |
---|---|---|---|
160 | 0291 | Abd al-Salam Hadi | 1156 |
170 | 0302 | Ahmad Mostafa | 1157 |
210 | 0203 | Reem Hammad | 1158 |
350 | 0294 | Abd Allah Sadiq | 1159 |
185 | 0255 | Raghad al-Hamdan | 1160 |
165 | 0276 | Abd al-Razzaq Salloum | 1161 |
175 | 0247 | Hussam Siraj | 1162 |
تبدأ العمليات في الشيفرة الآتية باستخدام BEGIN TRANSACTION
لتُجرَى العمليات بعدها:
BEGIN TRANSACTION;
DELETE FROM customers
WHERE Bill>200;
SAVEPOINT sp;
INSERT INTO customers VALUES(1163, 'Mohammad Baqi', 0278,180);
DELETE FROM customers
WHERE FullName LIKE 'H%';
ROLLBACK TO sp;
إذ تحذف بدايةً كل السجلات التي قيمة الفاتورة فيها أكبر من 200 وتُحفظ نقطة رجوع بعدها (تمكن العودة لها فيما بعد) ثم يُضاف سجل جديد للجدول ويحذف كل سجل يبدأ فيه الاسم بحرف H
، ويُعاد الجدول بالتعليمة الأخيرة لحالته المسبقة الحفظ عند نقطة الرجوع sp
(أي لن تُجرى تعديلات إضافة السجل وحذف السجلات باسمٍ يبدأ بحرف H
).
وسيصبح الجدول بشكل نهائي على النحو الآتي:
Bill | OrderID | FullName | CustomerID |
---|---|---|---|
160 | 0291 | Abd al-Salam Hadi | 1156 |
170 | 0302 | Ahmad Mostafa | 1157 |
185 | 0255 | Raghad al-Hamdan | 1160 |
165 | 0276 | Abd al-Razzaq Salloum | 1161 |
175 | 0247 | Hussam Siraj | 1162 |