رێککەوتنەکان(transaction) لە MySQL
Jun 23, 2018
3 خولەک
525 وشە
تــاگ: mysql
هاوبەشی بکە:

پێشەکی

توانایی transaction1لە MYSQL زنجیرە هەوڵێکە بەڕیزێک ڤۆ دەستکاری بنکەدراوەکان کە بەشێوازی یەکینە ئیشدەکا.بە ڕەستەیەکی دیکە، دەبێ هەر یەک لە قۆناغەکانی دەستکاری دراوەکانی بنکەدراوە بە دروستی ئەنجام ببێت.تا لە ئاکامی گشتی و کۆتایی بێ هەڵە ئیس بکا. ئەگینا گەر هەر کامێک لە پرۆسەکان لە هاوپۆلێک لە چوارچێوەی یەک پێناسە transaction، بە ئاکام نەگەیێت یان هەڵيی بێ، کۆتایی ئاکام بە هەڵە دەست پێدەکا.

تایبەتمەندی transaction لە MYSQL

یەک transaction بریتییەل لە ٤ تایبەتمەندی پێوەر، کە بە کورتەی ACID کورتدەبێتەوە:

  • Atomicity : دڵنیا دەکات کە گشتی کردارەکان لە ئیشێکی یەکتا بە سەرکەوتوویی ئەنجام دەبێ، بیچگە لەمە هەڵە ڕوو دەدا.
  • Consistency :دڵنیا دەکا لە دۆخی بنکەدراوە بە دروستی لە موەی ئەم کردارە دەستکارییە، گۆڕدراوە.
  • Isolation : ئەم transaction توانات دەکا تا بەشێوازی سەربەخۆ لە یەک کردار بکا.
  • Durability : دڵنیایێک دروستدەبێت کە ئاکامی یەلtransaction گرینگ لە کاتی خراپ بوونی سیستەم بەردەوام دەبێت.لە mYSQL دۆخی transaction ەکان بەBEGIN WORK دەستپێدەکا و بەCOMMIT یا ROLLBACK کۆتایی دێت.

فەرمانەکانی COMMIT و ROLLBACK

دوو وشەی کلیلی Commit و Rollback بە شێوازی گشتی بۆ Transaction ەکان MYSQL سوود دەگرێت. کاتێک کە یەک کرداری سەرکەوتوو ئەنجام دەبێت، فەرمانی COMMIT

  • لیست‌های بدون ترتیبدەبێهەناردە بکرێت تا گۆڕانکارییەکان لە هەموو خشتەکانی بەستراوە بە کردارەکان ئەنجام بێت.
  • گەر هەڵەیەک رووبدا، فەرمانێک ROLLBACK دەبێ هەناردە بکرێت تا هەر خسطەیەک لە کردار بە دۆخی پێشوو نیشان بدا.

ئێوە دەتوانن transaction بە رێکخستن گۆڕاوەکانی دانیشتن بە ناوی AUTOCOMMIT چاودێری دەکا. کاتێک AUTOCOMMIT بە بڕێک ١ (پێشگریمانە) رێککەوێت.لەدوای هەر فەرمانێک SQL (لە رێککەوتنێک یا نە) تەک Transaction تەواوە کاتێک کۆتایی پێ بێت، بە گریمانە ئەنجام دەبێت. کاتێک AUTOCOMMIT بڕی ۰ بێ،( بە رێکخستنی SET AUTOCOMMIT = 0 )زنجیرەی دوایی لە فەرمانەکان وەک یەک Transaction کردار دەکا، هیچ چالاکیێک تا کاتێک فەرمانی COMMIT جێبەجێ نەبێت، چالاک نابێت. ئێوە دەتوانن ئەم Queryـانە بە سوود وەرگرتن لە نەخشەی ()mysql_query لە php جێبەجێ دەکرێت.

نمونەیەکی گشتی لە Transaction

کۆی ئەم قۆناگانە بەو زمانی بەرنامەنووسییە کە بەکاری دەبرێت بەستراوەتەوە. دەستپێکردنی Transaction، بە جێبەجێکردنی BEGIN WORK لە فەرمانەکانی SQLـە. جێبەجیکردنی یەک یان فرە فەرمانەکانی SQL وەک SELECT, INSERT, UPDATE یا DELETE. چاودێری بکەن کە ئایا هیج هەڵەیەک بوونی هەیە وە هەموو شتێک بە پێی نیازی ئێوەیە. گەر هەڵەیەک بوونی هەبێت، فەرمانیROLLBACK هەناردە دەکرێت، بە پێجەوانە فەرمانی COMMIT جێبەجێدەکرێت.

جۆرەکانی Transaction-Safe لە MYSQL

ئێوە ناتوانن ڕاستەوخۆ لە transaction سوود بگرن.بەڵآم بۆ exception ـەکان دەتوانن ئەم کارە ئەنجام بدەن. بەڵام ئەمانە ئاسایش و ئەمن نین. گەر ئێوە مەبەستی سوود وەرگرتن transaction لە MYSQL هەیە، دەبێ خشتەکانی خۆتان بە شێوازی تایبەت دروستبکەن. جۆرەکانی جیاوازی خشتەکان بوونی هەیە کە لە transaction ـەکان پشتیوانی دەکرێت، بەڵآم بەرچاوکراوترین InnoDBــە . پاڵپشتی لە خشتەکان InnoDB نیاز بە پارەمەترێکی کامپایلی تایبەت کاتی کامپایل MYSQL لە سەرچاوە هەیە. ئێوە دەبێ MySQL هاوئاهەنگ لەگەڵ خشتەکان InnoDBــیتان هەبێت.دەنا دەبێ دایبگرن. گەر MYSQL لە InnoDB پشتیوانی دەکا، بە سادەیی پێناسەی TYPE = InnoDB بە فەرمانی دروستکردنی خشتە زیاد بکەن. بۆ نمونە کۆدی ژێرەوەی خشتەی InnoDB دروستدەکا کە ناوی tcount_tbl ـەیە:

root@host# mysql -u root -p password;
Enter password:*******
 
mysql> use TUTORIALS;
Database changed
 
mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)

هەروەها دەتوانن لە خشتەکانی DBD و GEMINI ـیش سوود بگرن، کە ئەمەش بە وشانەی دامەزراوەی MySQL ئێوە بستراوەتەوە.



  1. ڕێككه‌وتن، گواستنه‌وه‌ ↩︎