MySQLi তে Transaction ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ একটি ফিচার, যা ডেটাবেজ অপারেশনগুলিকে একযোগে একত্রিত (Atomic) রাখতে সাহায্য করে। একটি ট্রানজেকশনের মধ্যে একাধিক SQL অপারেশন একত্রে সম্পন্ন করা হয় এবং যদি কোনো একটি অপারেশন ব্যর্থ হয়, তাহলে পুরো ট্রানজেকশনটি বাতিল (Rollback) করা হয়। এটি ডেটাবেজের অখণ্ডতা (Integrity) বজায় রাখতে সহায়তা করে।
MySQLi তে Transaction ব্যবস্থাপনার জন্য START TRANSACTION, COMMIT, এবং ROLLBACK ব্যবহার করা হয়। নিচে আমরা এ তিনটি কাজের প্রক্রিয়া ব্যাখ্যা করব।
১. Transaction শুরু (START TRANSACTION)
যখন আপনি একটি নতুন ট্রানজেকশন শুরু করেন, তখন ডেটাবেজে সমস্ত পরিবর্তন একত্রিত করে করা হয়। ট্রানজেকশন শুরু করার জন্য START TRANSACTION ব্যবহার করা হয়। এর মাধ্যমে পরবর্তী সব অপারেশনকে একটি একক ইউনিট হিসেবে দেখা হয়।
উদাহরণ
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ট্রানজেকশন শুরু করা
$conn->begin_transaction();
?>
এখানে:
begin_transaction(): এটি ট্রানজেকশন শুরু করার জন্য ব্যবহৃত হয়। MySQLi এ এই মেথডটি ট্রানজেকশন শুরু করে।
২. Commit (ট্রানজেকশন সম্পন্ন করা)
যখন ট্রানজেকশনের সমস্ত SQL অপারেশন সফলভাবে সম্পন্ন হয়, তখন COMMIT ব্যবহার করে পরিবর্তনগুলি স্থায়ী (commit) করা হয়। COMMIT হল ডেটাবেজের পরিবর্তনগুলি চূড়ান্ত করার নির্দেশনা।
উদাহরণ
<?php
// SQL অপারেশনগুলো সম্পন্ন করার পরে
$sql1 = "UPDATE users SET balance = balance - 100 WHERE id = 1";
$sql2 = "UPDATE users SET balance = balance + 100 WHERE id = 2";
// প্রথম SQL অপারেশন চালানো
if ($conn->query($sql1) === TRUE) {
// দ্বিতীয় SQL অপারেশন চালানো
if ($conn->query($sql2) === TRUE) {
// সবকিছু সফল হলে ট্রানজেকশন কমিট করা
$conn->commit();
echo "Transaction committed successfully.";
} else {
// দ্বিতীয় অপারেশন ব্যর্থ হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction rolled back: " . $conn->error;
}
} else {
// প্রথম অপারেশন ব্যর্থ হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction rolled back: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে:
commit(): এটি সমস্ত অপারেশন সফল হলে ট্রানজেকশন কমিট করার জন্য ব্যবহৃত হয়।- যদি কোনো একটি অপারেশন ব্যর্থ হয়, তাহলে
rollback()ব্যবহার করা হয়।
৩. Rollback (ট্রানজেকশন বাতিল করা)
যদি ট্রানজেকশনের মধ্যে কোনো একটি SQL অপারেশন ব্যর্থ হয়, তাহলে পুরো ট্রানজেকশনটি বাতিল করতে ROLLBACK ব্যবহার করা হয়। এটি সব পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে নিয়ে আসে।
উদাহরণ
<?php
// SQL অপারেশনগুলো সম্পন্ন করার পরে
$sql1 = "UPDATE users SET balance = balance - 100 WHERE id = 1";
$sql2 = "UPDATE users SET balance = balance + 100 WHERE id = 2";
// প্রথম SQL অপারেশন চালানো
if ($conn->query($sql1) === TRUE) {
// দ্বিতীয় SQL অপারেশন চালানো
if ($conn->query($sql2) === TRUE) {
// সবকিছু সফল হলে ট্রানজেকশন কমিট করা
$conn->commit();
echo "Transaction committed successfully.";
} else {
// দ্বিতীয় অপারেশন ব্যর্থ হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction rolled back: " . $conn->error;
}
} else {
// প্রথম অপারেশন ব্যর্থ হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction rolled back: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে:
rollback(): এটি ট্রানজেকশনের সমস্ত পরিবর্তন বাতিল করে এবং ডেটাবেজকে পূর্বাবস্থায় ফিরিয়ে নিয়ে আসে।
৪. একাধিক SQL অপারেশন একসাথে
আপনি একাধিক SQL অপারেশন একত্রে একটি ট্রানজেকশনে প্রয়োগ করতে পারেন। যদি কোনো অপারেশন ব্যর্থ হয়, তাহলে পুরো ট্রানজেকশনটি ROLLBACK করা হবে। নীচে একটি উদাহরণ দেওয়া হল যেখানে দুটি UPDATE অপারেশন একত্রে একটি ট্রানজেকশনে করা হয়েছে।
একাধিক SQL অপারেশন উদাহরণ
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ট্রানজেকশন শুরু করা
$conn->begin_transaction();
// SQL অপারেশনগুলো
$sql1 = "UPDATE accounts SET balance = balance - 200 WHERE id = 1";
$sql2 = "UPDATE accounts SET balance = balance + 200 WHERE id = 2";
// প্রথম SQL অপারেশন চালানো
if ($conn->query($sql1) === TRUE) {
// দ্বিতীয় SQL অপারেশন চালানো
if ($conn->query($sql2) === TRUE) {
// সবকিছু সফল হলে ট্রানজেকশন কমিট করা
$conn->commit();
echo "Transaction committed successfully.";
} else {
// দ্বিতীয় অপারেশন ব্যর্থ হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction rolled back: " . $conn->error;
}
} else {
// প্রথম অপারেশন ব্যর্থ হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction rolled back: " . $conn->error;
}
// সংযোগ বন্ধ করা
$conn->close();
?>
এখানে:
- দুটি SQL অপারেশন একত্রে একটি ট্রানজেকশনে রাখা হয়েছে।
- যদি কোনো একটি অপারেশন ব্যর্থ হয়, তাহলে পুরো ট্রানজেকশনটি রোলব্যাক হবে এবং কোন পরিবর্তন ডেটাবেজে সংরক্ষিত হবে না।
সারাংশ
MySQLi তে Transaction ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ, যা ডেটাবেজের অখণ্ডতা নিশ্চিত করতে সাহায্য করে। START TRANSACTION দিয়ে একটি ট্রানজেকশন শুরু হয়, COMMIT দিয়ে সমস্ত অপারেশন সফল হলে পরিবর্তনগুলি স্থায়ী করা হয়, এবং ROLLBACK দিয়ে কোনো ত্রুটির কারণে সমস্ত অপারেশন বাতিল করা হয়। ট্রানজেকশন ব্যবহারের মাধ্যমে ডেটাবেজের নিরাপত্তা ও ডেটা এক্সট্র্যাকশন আরও কার্যকরী ও নির্ভরযোগ্য হয়ে ওঠে।
Read more