تراکنش ها (Transactions) در MySQL — راهنمای جامع
یک «تراکنش» (transaction)، گروهی متوالی از عملیات دستکاری پایگاه داده است که به صورت یک واحد کاری مجزا اجرا میشود. به بیان دیگر، یک تراکنش هرگز کامل نمیشود؛ مگر اینکه هر یک از اعمال درون گروه موفقیتآمیز باشند. اگر هر یک از اعمال درون تراکنش با شکست مواجه شوند، کل تراکنش شکست میخورد.
خصوصیات تراکنش
تراکنشها دارای چهار خصوصیت استاندارد هستند که معمولاً ACID نامیده میشوند. این موارد در ادامه بیان شدهاند.
- Atomicity – این خصوصیت تضمین میکند که همه عملیات درون واحد کاری به طور موفقیتآمیزی کامل شدهاند؛ در غیر این صورت، تراکنش در نقطه شکست متوقف میشود و عملیات قبلی به وضعیتهای (States) پیشین خود باز میگردند.
- Consistency – این خصوصیت تضمین میکند که پایگاه داده بر اساس اجرای موفقیتآمیز یک تراکنش، وضعیتها را به طور مناسبی تغییر میدهد.
- Isolation – این خصوصیت تراکنشها را قادر میسازد تا به طور مستقل از هم عمل کنند و برای یکدیگر شفاف باشند. به عبارت دیگر عملکرد هر تراکنش برای دیگر تراکنشها شفاف است؛ اما این امر مانع استقلال آنها از یکدیگر نمیشود.
- Durability – این خصوصیت تضمین میکند که نتیجه یا تأثیر یک تراکنش اجرا شده، در صورت از کار افتادن سیستم به قوت خود باقی میماند.
در MySQL، تراکنشها با عبارت «BEGIN WORK» آغاز و با عبارت «COMMIT» یا «ROLLBACK» پایان مییابند. دستورهای SQL قرار گرفته بین این عبارتهای آغاز و پایان بخش عمده تراکنشها را تشکیل میدهند.
COMMIT و ROLLBACK
این دو کلیدواژه به طور عمده برای تراکنشهای MySQL مورد استفاده قرار میگیرند.
- وقتی یک تراکنش موفق کامل میشود، دستور COMMIT باید صادر شود تا تغییرات صورت گرفته روی همه جدولهای درگیر اعمال شوند.
- اگر شکستی به وقوع بپیوندد، باید یک دستور ROLLBACK صادر شود تا کلیه جدولهایی که تراکنش به آنها ارجاع داشته، به وضعیت قبل خود بازگردند.
رفتار یک تراکنش را میتوان با تنظیم متغیر نشست (Session) که AUTOCOMMIT نامیده میشود، کنترل کرد. اگر AUTOCOMMIT روی ۱ تنظیم شده باشد (یعنی مقدار پیشفرض)، هر عبارت SQL (چه درون تراکنش باشد و چه نباشد) به عنوان یک تراکنش کامل در نظر گرفته میشود و به طور پیشفرض پس از پایان یافتن COMMIT میشود.
زمانی که AUTOCOMMIT روی مقدار 0 تنظیم شده باشد، با صادر کردن دستور SET AUTOCOMMIT = 0، سریهای بعدی عبارتها مانند یک تراکنش عمل میکنند و تا زمانی که یک دستور صریح COMMIT صادر نشود، هیچ فعالیتی به Commit نمیشود. این دستورهای SQL را میتوان در PHP با استفاده از تابع ()mysql_query اجرا کرد.
یک مثال کلی از تراکنش
توالی زیر از رویدادها، مستقل از زبان برنامهنویسی مورد استفاده است. مسیر منطقی را میتوان با هر زبانی که برای ساخت «برنامه کاربردی» (application) مورد استفاده قرار میگیرد ایجاد کرد.
این دستورات SQL را میتوان با استفاده از تابع ()mysql_query در زبان برنامهنویسی «پیاچپی» (PHP) اجرا کرد.
- آغاز تراکنش با صادر کردن دستور SQL که در ادامه آمده: BEGIN WORK
- صادر کردن یکی یا تعداد بیشتری از دستورهای SQL مانند SELECT, INSERT, UPDATE یا DELETE.
- بررسی اینکه خطایی وجود نداشته باشد و همه چیز مطابق با خواست کاربر (برنامهنویس) پیش برود.
- اگر خطایی وجود داشته باشد، باید یک دستور ROLLBACK و در غیر این صورت یک دستور COMMIT صادر شود.
انواع جدول تراکنش-امن در MySQL
به جز چند شرایط استثنایی مشخص، نمیتوان از تراکنشها به طور مستقیم استفاده کرد. با این وجود، شرایط مذکور نیز امن و تضمین شده نیستند. کاربرانی که تمایل به استفاده از تراکنشها در دستورات MySQL دارند، باید جدولهای خود را به شکل خاصی بسازند. انواع گوناگونی از جدولها در MySQL وجود دارد که از تراکنشها پشتیبانی میکنند، اما محبوبترین آنها InnoDB است.
پشتیبانی از جدولهای InnoDB نیازمند نوع خاصی از پارامترهای کامپایل هنگام کامپایل کردن MySQL از کد منبع است. اگر نسخه انواع تراکنش ها MySQL کاربر از InnoDB پشتیبانی نمیکند، نیاز به نصب نسخهای است که از این نوع جدول پشتیبانی کند. در صورتی که نسخه MySQL کاربر از InnoDB پشتیبانی میکند، کافی است در دستور ایجاد جدول از عبارت TYPE = InnoDB استفاده کند. برای نمونه کد زیر یک جدول InnoDB به نام tcount_tbl ایجاد میکند:
برای دریافت جزییات بیشتر در خصوص InnoDB میتوان به صفحه (+) مراجعه کرد. همچنین، میتوان انواع دیگری از جدولها مانند GEMINI یا BDB را نیز مورد استفاده قرار داد؛ اما این امر بستگی دارد به اینکه نسخه نصب شده توسط کاربر از آنها پشتیبانی میکند یا خیر.
اگر این مطلب برایتان مفید بوده، آموزشهای زیر نیز به شما پیشنهاد میشوند:
مفهوم تراکنش در پایگاه داده
معمولا دستوراتی که به پایگاه داده ارسال میکنید مستقل از هم احرا میشوند یعنی اگر شما اجرای تعدادی دستور از پایگاه داده درخواست نمائید اجرای این دستورات رابطهای با یکدیگر نخواهند داشت و ممکن است پایگاه داده شما به هر دلیلی از اجرای برخی از دستورات صرف نظر کند اما بقیه دستورات به درستی اجرا شوند.بعضی اوقات در دنیای واقعی و مخصوصا در خریدهای اینترنتی و واریز پول و یا فروش اینترنتی چند تراکنش به هم وابسته هستند و در صورتی که یکی از دستورات درخواستی از پایگاه داده اجرا نشوند صحت دادههای موجود در پایگاه داده از بین میرود که در این صورت باید تغییرات انجام یافته به حالت قبلی برگردانده شوند و از اجرای دستورات بعدی جلوگیری شود.تراکنشها را با مثالی توضیح میدهیم تا موضوع روشن شود فرض کنید طراحی سایت فروش فایل را انجام داده اید و کاربران با مراجعه به سایت و پرداخت مبلغی فایلی را دانلود میکنند حال باید چند مورد را در پایگاه داده ثبت کنید که شامل موارد زیر میباشند:
- واریز مبلغ مورد نظر فایل درخواستی به حساب فروشنده و ذخیرهی آن در جدول پرداختهای مربوط به کاربر
- ایجاد لینک دانلود و نمایش آن به کاربر
در اینجا دو حالت مشکل دار ممکن است پیش بیایید که در هر دو حالت باید کلیه تغییرات انجام یافته باید به حالت اولیه برگردانده شود و از اعمال بقیه تغییرات جلوگیری شود تا صحت دادها حفظ شوند.که این دو حالت عبارتند از
- عدم ذخیره مبلغ پرداختی در جدول پرداختهای کاربر و ایجاد لینک و نمایش آن به کاربر
- پرداخت صحیح و ذخیرهی آن در جدول پرداختهای کاربر و عدم ایجاد لینک و نمایش آن به خریدار
گرچه تعریفهای متعددی از تراکنش ارائه میشود بعضی ها به کلیه اعمال انجام یافته روی پایگاه داده را تراکنش میگویند یک تعریف که بیشتر مرسوم است و در بین متخصصین و برنامه نویسها بیشتر استفاده میشود تعریف زیر میباشد
تراکنشها مجموعهای از عملیات پایگاه داده است که بایستی به طور کامل انجام شوند یادر صورت بروز مشکل وضعیت به حالت قبلی بازگردانده شود(کتاب اصول پایگاه داده روحانی رانکوهی)
یک مثال عینی دیگر که همه ما کم و بیش با آن آشنا هستیم انتقال پول بیین حسابهای بانکی است که بعضی وقتها پول از حساب مشتری کسر میشود ولیه به حساب فروشنده واریز نمیشود که در این صورت باید مبلغ کسر شده از حساب مشتری باید برگرداننده شود.
در مقالات آتی نحوه استفاده از تراکنشها در زبان برنامه نویسی php را آموزش خواهیم داد.
آموزش اصول transactions در SQL SERVER
تراكنش (transactions) به یک فعل يا مجموعه ای از افعال و عملیات می گويند كه در قالب یا به صورت یک گروه و به منظور اطمینان حاصل کردن از موفقیت یا عدم موفقیت عملیات انجام می شود. به همين خاطر قوانينی وجود دارد كه بايد آنها را رعايت كرد. همچنين راهكارهایی برای استفاده بهينه ی از تراکنش طراحی شده است.
به تعریفی دیگر، تراکنش یک یا چند دستور SQL نظیر بروزرسانی (update)، درج (insert) و یا حذف (delete) یک یا چندین سطر یا رکورد از داده ها است که با یکدیگر یک واحد منطقی از کار را شکل می دهند. این دستورات SQL که تشکیل دهنده ی تراکنش هستند، به نوعی کاملا مرتبط و متصل به هم هستند و اعمال وابسته به هم را انجام می دهند. هر دستور در تراکنش بخشی از یک کار را انجام می دهد، اما برای تکمیل کار، همه ی دستورات مزبور ضروری و لازم هستند.
قواعدی که می بایست رعایت کرد، همگی در قالب سرنام ACID خلاصه می شوند:
- Atomicity (A) تجزیه ناپذیری: چنانچه transaction شامل مجموعه ای از عمليات باشد، در این صورت همه آن ها می بايست اجرا شوند (با موفقیت انجام شوند)، در غير اين صورت حتی اگر فقط یک عمليات اجرا نشود باقی آن ها نيز اجرا نخواهند شد (کل عملیات با شکست مواجه می شود). در حقیقت یکپارچگی به معنای این است که تراکنش باید به عنوان یک واحد منسجم (غیر قابل تفکیک) در نظر گرفته شود.
- Consistency (C) (سازگاری): عمليات بايد پیوسته باشند سازگاری زمانی وجود دارد که هر تراکنش، سیستم را در یک حالت سازگار قرار دهد (چه تراکنش به طور کامل انجام شود و چه به علت وجود خطایی خنثی و لغو گردد).
- (I) Isolation(تفکیک انواع تراکنش ها یا ISOLATION):زمانی كه عمليات اجرا می شوند، این عملیات بایستی کاملا از يكديگر جدا باشند. علت ضرورت جدایی این عملیات، جلوگیری از درهم ترکیب شدن آنها در يک سرویس دهنده يا يک پایگاه داده می باشد.
- :Durability (D) هنگام اجرای عمليات، رایانه تغييرات آن ها را دنبال می كند. اگر اشكال یا خطای باعث توقف عمليات شده و رایانه restart شود، پس انواع تراکنش ها از بالا آمدن خود به خود عمليات را ادامه می دهد. بعد از اجرای عمليات و اطمينان از بی نقص بودن، می توان آن را ذخیره كرده و برای دفعات بعد در آینده بكار برد (به عبارتی دیگر پایداری به معنای این است که تغییرات حاصل از نهایی شدن تراکنش، حتی در صورت خرابی سیستم نیز ماندگار میماند).
ایجاد یک Transaction
قبل از ايجاد و راه اندازی یک تراکنش، شما باید عملياتی که قرار است اجرا شود را تعريف كنيد. برای مشخص كردن شروع يک transactions ، قبل از اولين عمليات، كلمه ی BEGIN TRAN يا BEGIN TRANSACTION را به همراه فرمول زير تايپ كنيد:
دستور را با عبارت BEGIN TRAN يا BEGIN TRANSACTION آغاز كرده، سپس در صورت تمایل transaction_name را درج نمایید. اگر قبلا متغیر متنی اعلان کرده اید (char، nchar، varchar یا (nvarchar و یک اسم تراکنش به آن تخصیص داده اید، در آن صورت می توانید transaction_name را حذف كرده و از اسم متغير استفاده كنید. چنانچه مايلید شرحی از transaction در log file (فایل ثبت گزارش) نوشته شود، عبارت WITH MARK را تايپ كرده و شرحی که باید در فايل نوشته شود را پس از عبارت ذکر شده، تایپ کنید.
كد بين BEGIN TRAN يا BEGIN TRANSACTION قسمتی از transaction است.
تایید ثبت یک تراکنش (transaction commission)
بعد از تعريف عمليات که بخشی از تراکنش را تشکیل می دهد، موتور database آن ها را به ترتیبی که نوشته شده اجرا می كند. شما بايد انتها یا پايان transaction ها را مشخص نمایید. برای این منظور (تعریف شروع تراکنش) عبارت BEGIN TRAN يا BEGIN TRANSACTION را تايپ كنيد
كد انواع تراکنش ها حاضر از موتور پایگاه داده (database engine) درخواست ايجاد يک جدول به نام employee را در Administration schema پایگاه داده ی Exercise می كند. پس از ایجاد جدول، table بايد اول يک سطر و سپس دو سطر یا رکورد درخود ایجاد کند. سپس يک تراکنش که در آن 3 رکورد ایجاد می شوند را پردازش کند. بعد از آن تراکنش، عملیات درج داده با افزودن رکورد ادامه پيدا كرده برای ارائه ی امکان درک بهتر يک error را در كد تراکنش قرار می دهيم. نتیجه ی زیر را بدست می دهد:
جدول نهایی به شکل زیر خواهد بود:
توجه داشته باشید که کد دربردارنده ی تراکنش، با موفقیت کامل انجام نشده و رکوردهای آن نیز ایجاد نشده اند.
باز گرداندن یک تراکنش به حالت اول (Rollback)
كد زير را در نظر بگيرید:
پس از اجرا، نتیجه ی زیر در query editor نمایش داده خواهد شد:
توجه كنيد كه در كد تراکنش یک خطا وجود دارد. رکوردهای ایجاد شده به صورت زیر خواهند بود:
همان طور که مشاهده می كنيد، با وجود خطا، تراکنش اجرا شده و بخشی كه خطا دارد ناديده گرفته شده است.
در برخی موارد، برای به كار بردن قواعد اشاره شده در بالا یا اصل تجزیه ناپذیری (atomicity)، ممكن است كه در صورت وجود خطا در حتی يک بخش، از اجرای کل تراکنش صرف نظر كنيد. به عبارت انواع تراکنش ها ديگر، يک تراکنش می بایست كامل بوده و به درستی اجرا شود و يا کلا اجرا نشود. به منظور درخواست از database engine برای تاييد درستی تراکنش یا رد کردن و لغو کل آن، تراکنش مورد نظر را به عقب یا به حالت اول برمی گردانیم (در اصطلاح rollback کنیم). به اين منظور پشتیبانی از این قابلیت، بجای تایید ثبت تراکنش (عبارت COMMIT TRANSACTION)، عبارت ROLLBACK TRANSACTION را به صورت زير استفاده می كنيم:
عبارت مورد نظر را با ROLLBACK TRAN يا ROLLBACK TRANSACTIONشروع كنيد. چانچه برای تراکنشی اسمی تخصیص یافته، در آن صورت اسم تراکنش يا متغير حاوی اسم تراکنش را تايپ كنيد. اگر قصد دارید این عملیات را ذخیره کنید، از عبارت savepoint_name يا @savepoint_variable استفاده نمایید.
در نمونه ی زیر ملاحظه می کنید که یک تراکنش در صورت موفق نبودن (کاملا با موفقیت اجر نشدن) به حالت اول برمی گردد.
اين كد ابتدا يک جدول به اسم Employee ایجاد می کند. سپس از database engine درخواست افزودن چند رکورد به آن جدول را می كند. تشكيل سطرها در تراکنشی که گزینه یا امکان بازگردانی و ROLLBACK در آن لحاظ شده، صورت می گیرد (گنجانده شده است).
ملاحظه می کنید كه يک خطا در تراکنش وجود دارد.
زمانی كه كد بالا اجرا می شود، می بینید که جدول مورد نظر بدون هیچ گونه خطایی ساخته می شود زیرا عملیات آن بیرون از تراکنش قرار دارد. با این حال خواهی دید که جدول نهايی تهی خواهد بود.
به خاطر وجود یک خطا كل تراکنش لغو یا رد خواهد شد.
مدیریت سطح جداسازی و منابع مورد نیاز تراکنش (Isolation Level)
در یک پایگاه داده، اگر که یک رکورد پس از آخرين بار باز کردن و استفاده از جدول، مورد ویرایش یا تغییراتی قرار گیرد در آن صورت به اصطلاح پایگاه داده dirtyخوانده می شود.
در زمان ایجاد يک تراکنش شما می توانيد طوری database engine را پیکربندی كنيد كه تراکنش را اجرا يا رد/لغو كند. برای استفاده از اين امکان می توانید فرمول زير را مورد استفاده قرار دهید:
ابتدا عبارت SET TRANSACTION ISOLATION LEVEL را برای تنظیم سطح جداسازی درج نموده، سپس مقدار مورد نظر را وارد کنید.
:READ UNCOMMITTED.1اين مقدار به پایگاه داده دستور می دهد آن رکوردهایی را که dirty هستند ولی هنوز تایید ثبت یا commit نشده اند را بخواند.
:READ COMMITTED.2این مقدار مشخص می کند که رکوردهای dirty نبایست خواند شوند.
REPEATABLE READ.3: مشخص می کند که تراکنش جاری باید رکوردهای dirty که متعلق به تراکنش های دیگر هستند را نادیده بگیرد، همچنین در این حالت دیگر تراکنش ها دسترسی به رکوردهای این تراکنش را ندارند.
Snapshot .4
Serializable .5
مجموعه مطالب و مقالات درباره بازاریابی ، تبلیغات ، فروش و مدیریت
مجموعه مطالب و مقالات درباره بازاریابی ، تبلیغات ، فروش و مدیریت
انواع انواع تراکنش ها تجارت الکترونیک از حیث تراکنش ها
تجارت الکترونیک را میتوان از حیث تراکنشها(Transactions) به انواع مختلفی تقسیم نمود که بعضی از آنها عبارتند از:
- ارتباط بنگاه و بنگاه (B2B): به الگویی انواع تراکنش ها از تجارت الکترونیکی گویند، که طرفین معامله بنگاهها هستند.
- ارتباط بنگاه و مصرف کننده (B2C): به الگویی از تجارت الکترونیک گویند که بسیار رایج بوده و ارتباط تجاری مستقیم بین شرکتها و مشتریان میباشد.
- ارتباط مصرف کنندهها و شرکتها (C2B): در این حالت اشخاص حقیقی به کمک اینترنت فراوردهها یا خدمات خود را به شرکتها میفروشند.
- ارتباط مصرفکننده با مصرفکننده (C2C): در این حالت ارتباط خرید و فروش بین مصرفکنندگان است.
- ارتباط بین بنگاهها و سازمانهای دولتی (B2A): که شامل تمام تعاملات تجاری بین شرکتها و سازمانهای دولتی میباشد. پرداخت مالیاتها و عوارض از این قبیل تعاملات محسوب میشوند.
- ارتباط بین دولت و شهروندان (G2C): الگویی بین دولت و توده مردم میباشد که شامل بنگاههای اقتصادی، موسسات دولتی و کلیه شهروندان میباشد. این الگو یکی از مولفههای دولت الکترونیک میباشد.
- ارتباط بین دولتها (G2G): این الگو شامل ارتباط تجاری بین دولتها در زمینههایی شبیه واردات و صادرات میباشد.
البته باید گفت که انواع بالا کاملاً مستقل از هم نیستند و گاهی که تاکید بر خرید و فروش ندارند در قالب کسب و کار الکترونیک میآیند
E-commerce can be in terms of transactions (Transactions) divided into several types, some of which include: Its firm and business (B2B): a model of e-commerce say, that the opposing side firms.
Its business and consumer (B2C): a model of e-commerce that is very common and direct business relationship between companies and customers.
Its consumer and enterprise (C2B): The real people to help Internet companies sell products or services.
Its consumer to consumer (C2C): The relationship between consumer sales.
The relationship between business and government organizations (B2A): that is all business transactions between companies and government agencies. Payment of taxes and fees from such interactions are considered.
The relationship between government and citizens (G2C): is a model between the government and the general public, including businesses, public institutions and all citizens. This model is one of the components of e-government.
The relationship between the government (G2G): This template contains business relationship between states in areas like import and export.
Of course, the above types are totally independent of each other and sometimes they do not focus on the sales come in the form of e-business
مجموعه مطالب و مقالات درباره بازاریابی ، تبلیغات ، فروش و مدیریت
مجموعه مطالب و مقالات درباره بازاریابی ، تبلیغات ، فروش و مدیریت
انواع تجارت الکترونیک از حیث تراکنش ها
تجارت الکترونیک را میتوان از حیث تراکنشها(Transactions) به انواع مختلفی تقسیم نمود که بعضی از آنها عبارتند از:
- ارتباط بنگاه و بنگاه (B2B): به الگویی از تجارت الکترونیکی گویند، که طرفین معامله بنگاهها هستند.
- ارتباط بنگاه و مصرف کننده (B2C): به الگویی از تجارت الکترونیک گویند که بسیار رایج بوده و ارتباط تجاری مستقیم بین شرکتها و مشتریان میباشد.
- ارتباط انواع تراکنش ها مصرف کنندهها و شرکتها (C2B): در این حالت اشخاص حقیقی به کمک اینترنت فراوردهها یا خدمات خود را به شرکتها میفروشند.
- ارتباط مصرفکننده با مصرفکننده (C2C): در این حالت ارتباط خرید و فروش بین مصرفکنندگان است.
- ارتباط بین بنگاهها و سازمانهای دولتی (B2A): که شامل تمام تعاملات تجاری بین شرکتها و سازمانهای دولتی میباشد. پرداخت مالیاتها و عوارض از این قبیل تعاملات محسوب میشوند.
- ارتباط بین دولت و شهروندان (G2C): الگویی بین دولت و توده مردم میباشد که شامل بنگاههای اقتصادی، موسسات دولتی و کلیه شهروندان میباشد. این الگو یکی از مولفههای دولت الکترونیک میباشد.
- ارتباط بین دولتها (G2G): این الگو شامل ارتباط تجاری بین دولتها در زمینههایی شبیه واردات و صادرات میباشد.
البته باید گفت که انواع بالا کاملاً مستقل از هم نیستند و گاهی که تاکید بر خرید و فروش ندارند در قالب کسب و کار الکترونیک میآیند
E-commerce can be in terms of transactions (Transactions) divided into several types, some of which include: Its firm and business (B2B): a model of e-commerce say, that the opposing side firms.
Its business and consumer (B2C): a model of e-commerce that is very common and direct business relationship between companies and customers.
Its consumer and enterprise (C2B): The real people to help Internet companies sell products or services.
Its consumer to consumer (C2C): The relationship between consumer sales.
The relationship between business and government organizations (انواع تراکنش ها B2A): that is all business transactions between companies and government agencies. Payment of taxes and fees from such interactions are considered.
The relationship between government and citizens (G2C): is a model between the government and the general public, including businesses, public institutions and all citizens. This model is one of the components of e-government.
The relationship between the government (G2G): This template contains business relationship between states in areas like import and export.
Of course, the above types are totally independent of each other and sometimes they do not focus on the sales come in the form of e-business
دیدگاه شما