با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش SQLite را دنبال می کنند. transaction در SQLite یک سری عملیات ترتیبی دستکاری پایگاه داده است که به صورت یک واحد یکتا کار می کند، به عبارتی دیگر باید هر یک از فرآیندهای دستکاری داده های دیتابیس به درستی انجام شود تا نتیجه ی کلی و نهایی نیز بدون خطا انجام شود، در غیر این صورت اگر هر یک از این فرآیندهایی که در یک گروه در قالب یک transaction تعریف شده به نتیجه نرسیده و یا با خطا مواجه شود نتیجه ی نهایی نیز با خطا مواجه خواهد بود، در ادامه ی این مبحث شما را بیشتر با ویژگی transaction در SQLite آشنا خواهیم کرد.
در ادامه ی این آموزش با ویژگی transaction در SQLite و انواع آن آشنا خواهید شد.
transaction ها شامل ۴ خصوصیت استاندارد می باشند، که در مخفف ACID خلاصه می شود:
دستورات زیر برای کنترل transaction ها استفاده می شوند :
دستورات کنترل Transactional فقط با دستورات DML نظیر INSERT, UPDATE و DELETE بکار می روند.
این دستورات نمی توانند هنگام ایجاد جداول یا حذف آنها استفاده شوند زیرا این عملیات به طور خودکار در پایگاه داده انجام می شود.
Transaction ها را می توان با دستور BEGIN TRANSACTION و یا ساده تر آن BEGIN شروع کرد.
چنین Transaction ها معمولا تا زمانی که دستور COMMIT یا ROLLBACK بعدی رخ می دهد باقی می ماند.
با این وجود در صورت بسته بودن دیتابیس و یا رخ دادن خطا، transaction برمی گردد.
سینتکس اصلی شروع یک transaction در SQLite به صورت زیر است :
1 2 3 | BEGIN; or BEGIN TRANSACTION; |
COMMIT نیز یک دستور transactional است که برای ذخیره ی تغییرات انجام شده توسط transaction در یک دیتابیس بکار می رود.
دستور COMMIT تمام transaction ها را از آخرین دستور COMMIT یا ROLLBACK در دیتابیس ذخیره می کند.
سینتکس اصلی دستور COMMIT در SQLite به صورت زیر است :
1 2 3 | COMMIT; or END TRANSACTION; |
یکی دیگر از دستورات transactional دستور ROLLBACK است که برای بازگرداندن transaction هایی که به هر دلیلی به طور کامل در دیتابیس ذخیره نشده اند، استفاده می شود.
ROLLBACK تغییرات transaction ها را فقط از آخرین دستور COMMIT یا ROLLBACK اجرا شده در دیتابیس باز می گرداند.
سینتکس اصلی دستور ROLLBACK در دیتابیس به صورت زیر است :
1 | ROLLBACK; |
مثال
جدول COMPANY را با رکوردهای زیر در نظر بگیرید:
1 2 3 4 5 6 7 8 9 | 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 |
حالا ما یک transaction را شروع می کنیم که در آن، تمام رکوردهایی را که فیلد age آن ها برابر با ۲۵ باشد را از جدول COMPANY حذف می کند.
سپس با استفاده از دستور ROLLBACK تغییرات انجام شده را بازمی گردانیم.
1 2 3 | sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> ROLLBACK; |
حالا اگر جدول COMPANY را چک کنید، هنوز هم همان رکوردهای قبلی را خواهیم داشت :
1 2 3 4 5 6 7 8 9 | 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 |
یک transaction دیگر را شروع کرده و طی آن تمام رکوردهایی را که فیلد age آن ها برابر با ۲۵ باشد را از جدول COMPANY حذف می کنیم.
سپس با استفاده از دستور COMMIT تغییرات انجام شده را در دیتابیس ذخیره می کنیم:
1 2 3 | sqlite> BEGIN; sqlite> DELETE FROM COMPANY WHERE AGE = 25; sqlite> COMMIT; |
حالا اگر جدول COMPANY را بررسی کنید، رکوردهای زیر را مشاهده خواهید کرد :
1 2 3 4 5 6 7 | 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 |
اگر می خواهید QUERY ها را در SQLite در قالب یک فرآیند واحد انجام داده و تغییرات را ذخیره یا بازگردانید، استفاده از ویژگی transaction در SQLite به شما توصیه می شود، البته قبل از هر کاری از اینکه نسخه ی SQLite نصب شده ی شما از انواع transaction پشتیبانی می کند اطمینان حاصل کنید.