یک تراکنش MySQL گروهی از دستورات SQL است که به طور منطقی مرتبط هستند و به عنوان یک یونیت واحد در بانک اطلاعاتی اجرا می شوند. تراکنش ها برای اجرای ACID (Atomicity, Consistency, Isolation, Durability ) یعنی ظرفیت ، ثبات ، انزوا و دوام در یک برنامه استفاده می شود. در واقع مجموعه ای از استانداردها است که قابلیت اطمینان عملیات پردازش را در یک پایگاه داده هدایت می کند.
در صورت بروز خطا ، Atomicity موفقیت تراکنش های مرتبط یا شکست کامل را تضمین می کند. Consistency ، اعتبار داده های ارسالی به پایگاه داده را مطابق با منطق تعریف شده کسب و کار تضمین می کند. Isolation ، اجرای صحیح تراکنش های همزمان است که تضمین میکند مشتری های مختلفی که به یک بانک اطلاعاتی متصل می شوند ، بر یکدیگر تأثیر نمی گذارند. Durability تضمین می کند که تراکنش ها مرتبط از لحاظ منطقی به طور دائم در پایگاه داده باقی بمانند.
عبارات SQL صادر شده از طریق تراکنش یا باید موفقیت آمیز باشد یا در کل با شکست پایان یابد. در صورت عدم موفقیت هر یک از جستارها، MySQL تغییرات را پس می زند و هرگز به پایگاه داده ارائه نمی کند.
یک مثال خوب برای درک نحوه عملکرد تراکنش ها MySQL یک وب سایت تجارت الکترونیکی است. هنگامی که مشتری سفارش می دهد ، بسته به منطق کسب و کار ، برنامه سوابق را در چندین جدول مانند: orders  و orders_products درج می کند. سوابق چند جدولی مربوط به یک سفارش واحد باید به صورت اتمی به عنوان یک یونیت منطقی واحد به بانک اطلاعاتی ارسال شود.
مورد دیگر استفاده در یک برنامه بانکی است. هنگامی که مشتری در حال انتقال پول است ، چند تراکنش به بانک اطلاعاتی ارسال می شوند. حساب فرستنده بدهکار میشود و به حساب طرف گیرنده اعتبار داده می شود. این دو تراکنش باید همزمان انجام شود. اگر یکی از آنها موفقیت آمیز نباشد ، پایگاه داده به حالت اصلی خود بازمیگردد و هیچ تغییری در دیسک ذخیره نمی شود.
در این آموزش ، شما از افزونه PDO PHP استفاده می کنید که واسطی برای کار با بانکهای داده در PHP ، جهت انجام تراکنش ها MySQL روی یک سرور مجازی Ubuntu 18.04 ، فراهم می کند.
پیش نیازها
قبل از شروع به موارد زیر نیاز خواهید داشت:
⦁ یک سرور مجازی Ubuntu 18.04 که با دنبال کردن راهنمای راه اندازی سرور مجازی اولیه با اوبونتو 18.04 نصب شده باشد و شامل یک کاربر غیر ریشه سودو باشد.
⦁ Apache ، MySQL و PHP که روی سیستم شما نصب شده باشند. شما می توانید راهنمای نحوه نصب پشته Linux ، Apache ، MySQL ، PHP (LAMP) روی Ubuntu 18.04 را دنبال کنید. می توانید مرحله 4 (تنظیم میزبان های مجازی) را جست و جو کنید و مستقیماً با تنظیمات پیش فرض آپاچی کار کنید.
مرحله 1 – ایجاد یک بانک اطلاعاتی و جداول نمونه
ابتدا یک بانک اطلاعاتی نمونه ایجاد می کنید و قبل از شروع کار با تراکنش های MySQL ، چند جدول اضافه کنید. ابتدا به عنوان root به سرور مجازی MySQL خود وارد شوید:
⦁ $ sudo mysql -u root -p

در صورت درخواست ، رمزعبور ریشه MySQL خود را وارد کرده و ENTER را بزنید تا ادامه یابد. سپس ، یک بانک اطلاعاتی ایجاد کنید ، برای اهداف این آموزش ما با پایگاه داده sample_store را فراخوانی کنیم:
⦁ Mysql> CREATE DATABASE sample_store;

خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.00 sec)

یک کاربر به نام sample_user برای پایگاه داده خود ایجاد کنید. به یاد داشته باشید که PASSWORD را با یک مقدار قوی جایگزین کنید:
⦁ Mysql> CREATE USER ‘sample_user’@’localhost’ IDENTIFIED BY ‘PASSWORD’;

امتیازات کاملی را برای کاربر خود به پایگاه داده sample_store صادر کنید:
⦁ Mysql> GRANT ALL PRIVILEGES ON sample_store.* TO ‘sample_user’@’localhost’;

در آخر ، امتیازات MySQL را مجدد لود کنید:
⦁ Mysql> FLUSH PRIVILEGES;

وقتی کاربر خود را ایجاد کردید ، خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.01 sec)
. . .

با قرارگیری پایگاه داده و کاربر در جای خود ، می توانید چندین جدول برای نشان دادن نحوه عملکرد تراکنش ها MySQL ایجاد کنید.
از سرور مجازی MySQL خارج شوید:
⦁ Mysql> QUIT;

پس از خروج از سیستم ، خروجی زیر را مشاهده خواهید کرد:
Output
Bye.

سپس با اعتبار sample_user که تازه ایجاد کرده اید وارد شوید:
⦁ $ sudo mysql -u sample_user -p

کلمه عبور را برای sample_user وارد کنید و برای ادامه ، ENTER را بزنید.
برای تبدیل شدن آن به پایگاه داده فعلی انتخاب شده ، به sample_store سوییچ کنید:
⦁ Mysql> USE sample_store;

پس از انتخاب خروجی زیر را مشاهده خواهید کرد:
Output
Database Changed.

بعد ، یک جدول products  ایجاد کنید:
⦁ Mysql> CREATE TABLE products (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE) ENGINE = InnoDB;

این دستور یک جدول products با فیلدی به نام product_id ایجاد می کند. شما از یک نوع داده BIGINT استفاده می کنید که می تواند مقدار زیادی تا 2^63-1 را در خود جای دهد. برای شناسایی منحصر به فرد محصولات از این فیلد به عنوان کلید اصلی استفاده می کنید. کلمه کلیدی AUTO_INCREMENT به MySQL دستور می دهد تا با وارد کردن محصولات جدید ، عددی بعدی ایجاد شود.
قسمت product_name از نوع VARCHAR است که می تواند حداکثر 50 حرف یا عدد را در خود نگه دارد. برای قیمت محصول ، از یک نوع داده DOUBLE برای تهیه قالب های نقطه شناور در قیمت ها با عدد اعشاری استفاده می کنید.
سرانجام ، از InnoDB به عنوان ENGINE استفاده می کنید زیرا برخلاف سایر موتورهای ذخیره سازی مانند MyISAM ، به راحتی از تراکنش های MySQL پشتیبانی می کند.
هنگامی که جدول محصولات خود را ایجاد کردید ، خروجی زیر را دریافت خواهید کرد:
Output
Query OK, 0 rows affected (0.02 sec)

در مرحله بعد با اجرای دستورات زیر برخی موارد را به جدول محصولات اضافه کنید:
⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘WINTER COAT’,’25.50′);

⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘EMBROIDERED SHIRT’,’13.90′);

⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘FASHION SHOES’,’45.30′);

⦁ Mysql> INSERT INTO products(product_name, price) VALUES (‘PROXIMA TROUSER’,’39.95′);

بعد از هر عمل INSERT ، خروجی مشابه زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.02 sec)
. . .

سپس بررسی کنید که داده ها به جدول محصولات اضافه شده باشند:
⦁ Mysql> SELECT * FROM products;

لیستی از چهار کالایی را که درج کرده اید خواهید دید:
Output
+————+——————-+——-+
| product_id | product_name | price |
+————+——————-+——-+
| 1 | WINTER COAT | 25.5 |
| 2 | EMBROIDERED SHIRT | 13.9 |
| 3 | FASHION SHOES | 45.3 |
| 4 | PROXIMA TROUSER | 39.95 |
+————+——————-+——-+
4 rows in set (0.01 sec)

در مرحله بعدی ، شما یک جدول customers برای نگهداری اطلاعات اولیه درباره مشتریان ایجاد خواهید کرد:
⦁ Mysql> CREATE TABLE customers (customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE = InnoDB;

همانطور که در جدول محصولات وجود دارد ، از نوع داده BIGINT برای customer_idاستفاده می کنید و این تضمین می کند که جدول می تواند تعداد زیادی مشتری تا 2^63-1 را پشتیبانی کند. کلمه کلیدی AUTO_INCREMENT پس از وارد کردن مشتری جدید ، مقدار ستون ها را افزایش می دهد.
از آنجا که ستون customer_name الفبا را می پذیرد، از نوع داده VARCHAR با محدودیت 50 کاراکتر استفاده می کنید. باز هم ، برای پشتیبانی از تراکنش ها از ENGINE ذخیره سازی InnoDB استفاده می کنید.
پس از اجرای دستور قبلی برای ایجاد جدول مشتری ، خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.02 sec)

شما سه مشتری نمونه به جدول اضافه خواهید کرد. دستورات زیر را اجرا کنید:
⦁ Mysql> INSERT INTO customers(customer_name) VALUES (‘JOHN DOE’);

⦁ Mysql> INSERT INTO customers(customer_name) VALUES (‘ROE MARY’);

⦁ Mysql> INSERT INTO customers(customer_name) VALUES (‘DOE JANE’);
پس از افزودن مشتریان ، خروجی مشابه با زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.02 sec)
. . .

سپس داده ها را در جدول مشتریان بررسی کنید:
⦁ Mysql> SELECT * FROM customers;

لیستی از سه مشتری را مشاهده خواهید کرد:
Output
+————-+—————+
| customer_id | customer_name |
+————-+—————+
| 1 | JOHN DOE |
| 2 | ROE MARY |
| 3 | DOE JANE |
+————-+—————+
3 rows in set (0.00 sec)

در مرحله بعد ، می توانید برای ثبت سفارشات توسط مشتریان مختلف ، جدول سفارشات ایجاد کنید. برای ایجاد جدول سفارشات ، دستور زیر را اجرا کنید:
⦁ Mysql> CREATE TABLE orders (order_id BIGINT AUTO_INCREMENT PRIMARY KEY, order_date DATETIME, customer_id BIGINT, order_total DOUBLE) ENGINE = InnoDB;

از ستون order_id بعنوان کلید اصلی استفاده می کنید. نوع داده های BIGINT به شما امکان می دهد تا حداکثر 2 ^ 63-1 سفارش را در خود جای دهید و پس از هر درج سفارش ، خودکار افزایش می یابد. قسمت rend_date تاریخ و زمان واقعی سفارش را نگه می دارد و از این رو ، از نوع داده DATETIME استفاده می کنید. customer_id به جدول مشتریانی که قبلاً ایجاد کرده اید مربوط می شود.
خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.02 sec)

از آنجا که سفارش یک مشتری ممکن است شامل چندین مورد باشد ، برای نگه داشتن این اطلاعات باید یک جدول orders_productsرا ایجاد کنید.
برای ایجاد جدول order_products ، دستور زیر را اجرا کنید:
⦁ Mysql> CREATE TABLE orders_products (ref_id BIGINT PRIMARY KEY AUTO_INCREMENT, order_id BIGINT, product_id BIGINT, price DOUBLE, quantity BIGINT) ENGINE = InnoDB;

 

با فشار دادن CTRL + X ، Y ، سپس enter فایل را ذخیره کرده و ببندید.
شما دستور را برای قرار دادن در جدول سفارشات از طریق روش insertTransaction آماده می کنید. پس از این ، مقدار مشخصه عمومی last_insert_id را از کلاس DBTransaction بازیابی می کنید و از آن به عنوان $ order_id استفاده می کنید.
اکنون که $order_id را دارید ، از شناسه منحصر به فرد برای درج موارد سفارش مشتری در جدول order_products استفاده می کنید.
سرانجام ، در صورت عدم وجود مشکل ، روش submitTransaction  را برای ارائه کلیه سفارشات مشتری به بانک اطلاعاتی فراخوانی میکنید. در غیر اینصورت ، روش submitTransaction  باعث بازگردانی تغییرات خواهد شد.
اکنون اسکریپت Order.php را در مرورگر خود اجرا کنید. موارد زیر را اجرا کنید و your-server-IP را با آدرس IP عمومی سرور مجازی خود جایگزین کنید:
http://your-server-IP/orders.php

تأیید صحت ارسال فایل با موفقیت را مشاهده خواهید کرد:

اسکریپت PHP شما مطابق آنچه انتظار می رود کار می کند و سفارش به همراه محصولات سفارش مرتبط با آن به صورت اتمی به بانک اطلاعاتی ارسال می شود.
شما فایل orders.php را در یک پنجره مرورگر اجرا کرده اید. اسکریپت کلاس DBTransaction را به کار گرفته و به نوبه خود جزئیات سفارشات را به پایگاه داده ارسال می کند. در مرحله بعد ، تأیید می کنید که سوابق در جداول بانک اطلاعاتی مرتبط ذخیره شده است.
مرحله 4 – تأیید ورودی ها به بانک اطلاعاتی شما
در این مرحله ، بررسی خواهید کرد که آیا تراکنشی که از پنجره مرورگر برای سفارش مشتری انجام شده است مطابق پیش بینی در جداول بانک اطلاعاتی ارسال شده است.
برای این کار ، دوباره وارد پایگاه داده MySQL شوید:
⦁ $ sudo mysql -u sample_user -p

برای ادامه رمز عبور sample_user را وارد کرده و ENTER را بزنید.
به پایگاه داده sample_storeسوییچ کنید:
⦁ Mysql> USE sample_store;

قبل از ادامه با تأیید خروجی زیر ، اطمینان حاصل کنید که بانک اطلاعات تغییر کرده است:
Output
Database Changed.

سپس دستور زیر را برای بازیابی سوابق از جدول سفارشات صادر کنید:
⦁ Mysql> SELECT * FROM orders;

با این کار خروجی زیر با جزئیات سفارش مشتری نمایش داده می شود:
Output
+———-+———————+————-+————-+
| order_id | order_date | customer_id | order_total |
+———-+———————+————-+————-+
| 1 | 2020-01-11 00:00:00 | 2 | 157.8 |
+———-+———————+————-+————-+
1 row in set (0.00 sec)

در مرحله بعد ، سوابق را از جدول order_products بازیابی کنید:
⦁ Mysql> SELECT * FROM orders_products;

با لیستی از محصولات موجود در سفارش مشتری ، خروجی مشابه زیر را مشاهده خواهید کرد:
Output
+——–+———-+————+——-+———-+
| ref_id | order_id | product_id | price | quantity |
+——–+———-+————+——-+———-+
| 1 | 1 | 1 | 25.5 | 1 |
| 2 | 1 | 2 | 13.9 | 3 |
| 3 | 1 | 3 | 45.3 | 2 |
+——–+———-+————+——-+———-+
3 rows in set (0.00 sec)

خروجی تأیید می کند که تراکنش در بانک اطلاعاتی ذخیره شده است و کلاس DBTransaction کمکی کلاس شما همانطور که انتظار می رود کار می کند.
نتیجه
در این راهنما از PHP PDO برای کار با تراکنش های MySQL استفاده کرده اید. اگرچه این مقاله قطعی در مورد طراحی یک نرم افزار تجارت الکترونیکی نیست ، اما نمونه ای برای استفاده از تراکنش های MySQL در برنامه های شما آورده است.
برای کسب اطلاعات بیشتر در مورد مدل MySQL ACID ، به راهنمای InnoDB و راهنمای مدل ACID از وب سایت رسمی MySQL مراجعه کنید. برای اطلاعات بیشتر در رابطه با آموزش ها ، مقاله ها و پرسش و پاسخ به صفحه محتوای MySQL ما مراجعه کنید.

 

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –