কম্পিউটার টিউটোরিয়াল

MySQL-এ কারেন্ট ট্রানজ্যাকশন নিচ্ছন্দে (Implicitly) শেষ করার উপায়

কারেন্ট MySQL ট্রানজ্যাকশন নিচ্ছন্দে (implicitly) শেষ হয় নিচের উপায়গুলোতে:

১. DDL স্টেটমেন্ট চালালে

যেকোনো DDL স্টেটমেন্ট (CREATE/DROP database, CREATE/ALTER/DROP table বা stored routine) চালালে কারেন্ট ট্রানজ্যাকশন নিচ্ছন্দে শেষ হয় এবং পরিবর্তনগুলো কমিট হয়। কারণ MySQL-এ DDL স্টেটমেন্ট রোলব্যাক করা যায় না।

উদাহরণ

mysql> START TRANSACTION;
mysql> INSERT INTO MARKS Values(3,'gaurav','Comp',69);
mysql> Create table student(id int, Name Varchar(10));
Query OK, 0 rows affected (0.84 sec)

ট্রানজ্যাকশন মাঝপথে DDL চলে, তাই ট্রানজ্যাকশন নিচ্ছন্দে কমিট হয়ে গেল। ROLLBACK করলেও ইনসার্টড ডেটা থাকে:

mysql> Rollback;
mysql> select * from marks;
+------+---------+-----------+-------+
| Id   | Name    | Subject   | Marks |
+------+---------+-----------+-------+
|    1 | Aarav   | Maths     |    50 |
|    1 | Harshit | Maths     |    55 |
|    3 | Gaurav  | Comp      |    69 |
+------+---------+-----------+-------+

২. ক্লায়েন্ট সেশন ডিসকানেক্ট করলে

ক্লায়েন্ট সেশন ডিসকানেক্ট করলে কারেন্ট ট্রানজ্যাকশন নিচ্ছন্দে শেষ হয় এবং পরিবর্তনগুলো রোলব্যাক হয়।

৩. ক্লায়েন্ট সেশন কিল করলে

DBA যদি KILL কমান্ড দিয়ে সেশন কিল করে, তবে ট্রানজ্যাকশন নিচ্ছন্দে শেষ হয় এবং রোলব্যাক হয়।

৪. START TRANSACTION কমান্ড দিয়ে

নতুন START TRANSACTION কমান্ড দিলে পুরনো ট্রানজ্যাকশন নিচ্ছন্দে শেষ হয় এবং কমিট হয়।

উদাহরণ

mysql> START TRANSACTION;
mysql> INSERT INTO Marks Values(4, 'Rahul','History',40);
mysql> INSERT INTO Marks Values(5, 'Yashraj','English',48);
mysql> START TRANSACTION; -- পুরনো ট্রানজ্যাকশন ইম্পলিসিটলি কমিট হয়
mysql> select * from marks; -- নতুন ইনসার্টগুলো দেখাবে
  1. MySQL-এ বর্তমান ট্রানজ্যাকশনে করা পরিবর্তন ডাটাবেসে স্থায়ীভাবে কীভাবে রেকর্ড করবেন?

  2. MySQL-এ বর্তমান ট্রানজ্যাকশন আইসোলেশন লেভেল কীভাবে চেক করবেন?

  3. MySQL রুট ইউজারের পূর্ণ প্রিভিলেজ ফিরিয়ে আনা

  4. MySQL-এ ভিন্ন ইউজার হিসেবে লগইন করা (mysql -u -p কমান্ড)