নিবন্ধ ডিরেক্টরি
মাইএসকিউএল ডাটাবেসলেনদেন রোলব্যাক বিচ্ছিন্নতা/ওপেন কনসেপ্ট/লেভেল প্রসেসিং পিএইচপি স্টেটমেন্ট
মাইএসকিউএল বিষয়গুলি
মাইএসকিউএল লেনদেনগুলি প্রধানত প্রচুর পরিমাণে অপারেশন এবং উচ্চ জটিলতার সাথে ডেটা প্রক্রিয়া করতে ব্যবহৃত হয়।উদাহরণ স্বরূপ, পার্সোনেল ম্যানেজমেন্ট সিস্টেমে, আপনি যদি কোনো ব্যক্তিকে মুছে ফেলেন, তাহলে আপনাকে ওই ব্যক্তির মৌলিক তথ্য এবং ব্যক্তির সাথে সম্পর্কিত তথ্য, যেমন মেইলবক্স, নিবন্ধ ইত্যাদি উভয়ই মুছে ফেলতে হবে। এইভাবে, এই ডাটাবেস অপারেশন স্টেটমেন্টগুলি একটি লেনদেন গঠন!
- লেনদেন MySQL-এ শুধুমাত্র ডাটাবেস বা টেবিলের জন্য সমর্থিত যেগুলি Innodb ডাটাবেস ইঞ্জিন ব্যবহার করে।
- লেনদেন প্রক্রিয়াকরণ ডাটাবেসের অখণ্ডতা বজায় রাখতে ব্যবহার করা যেতে পারে, নিশ্চিত করে যে এসকিউএল স্টেটমেন্টের ব্যাচগুলি হয় সবই কার্যকর করা হয়েছে বা তাদের কোনোটিই কার্যকর করা হয়নি।
- লেনদেন সন্নিবেশ পরিচালনা, আপডেট, বিবৃতি মুছে ফেলার জন্য ব্যবহার করা হয়
সাধারণভাবে বলতে গেলে, একটি লেনদেনের অবশ্যই 4টি শর্ত পূরণ করতে হবে (ACID): পারমাণবিকতা (পরমাণু), ধারাবাহিকতা (স্থায়িত্ব), বিচ্ছিন্নতা (বিচ্ছিন্নতা), স্থায়িত্ব (নির্ভরযোগ্যতা)
- 1,লেনদেনের পারমাণবিকতা:লেনদেনের একটি সেট যা হয় সফল হয় বা প্রত্যাহার করে।
- 2,স্থিতিশীলতা:অবৈধ তথ্য আছে (বিদেশী কী সীমাবদ্ধতা এবং এর মতো), এবং লেনদেন প্রত্যাহার করা হয়েছে।
- 3,আলাদা করা:লেনদেন স্বাধীনভাবে চলে।যদি একটি লেনদেনের ফলাফল অন্যান্য লেনদেনকে প্রভাবিত করে, তাহলে অন্যান্য লেনদেন প্রত্যাহার করা হবে।লেনদেনের 100% বিচ্ছিন্নতা, যার জন্য ত্যাগের গতি প্রয়োজন।
- 4,নির্ভরযোগ্যতা:সফ্টওয়্যার এবং হার্ডওয়্যার ক্র্যাশের পরে, InnoDB ডেটা টেবিল ড্রাইভার লগ ফাইলটিকে পুনর্গঠন এবং সংশোধন করতে ব্যবহার করবে।নির্ভরযোগ্যতা এবং উচ্চ গতি উভয়ই থাকতে পারে না, innodb_flush_log_at_trx_commit বিকল্পটি নির্ধারণ করে কখন লগে লেনদেন সংরক্ষণ করতে হবে।
MySQL কমান্ড লাইনের ডিফল্ট সেটিংসের অধীনে, লেনদেনগুলি স্বয়ংক্রিয়ভাবে প্রতিশ্রুতিবদ্ধ হয়, অর্থাৎ, এসকিউএল বিবৃতিটি কার্যকর হওয়ার সাথে সাথেই COMMIT অপারেশনটি কার্যকর করা হবে।অতএব, স্পষ্টভাবে একটি লেনদেন শুরু করতে, আপনাকে অবশ্যই BEGIN বা START TRANSACTION কমান্ডটি ব্যবহার করতে হবে, অথবা বর্তমান সেশনের জন্য স্বয়ংক্রিয় প্রতিশ্রুতির ব্যবহার নিষ্ক্রিয় করতে SET AUTOCOMMIT=0 কমান্ডটি চালাতে হবে।
লেনদেন নিয়ন্ত্রণ বিবৃতি:
- লেনদেন শুরু বা শুরু করুন; স্পষ্টভাবে একটি লেনদেন শুরু করুন;
- কমিট; কমিট ওয়ার্কও ব্যবহার করা যেতে পারে, তবে দুটি সমতুল্য। COMMIT লেনদেন করে এবং ডাটাবেসে করা সমস্ত পরিবর্তন স্থায়ী করে;
- রোলব্যাক; রোলব্যাক ওয়ার্ক ব্যবহার করা সম্ভব, তবে দুটি সমতুল্য।রোলব্যাক ব্যবহারকারীর লেনদেন শেষ করে এবং প্রগতিতে থাকা সমস্ত অনিয়মিত পরিবর্তনগুলিকে পূর্বাবস্থায় ফিরিয়ে দেয়;
- SAVEPOINT শনাক্তকারী; SAVEPOINT একটি লেনদেনে একটি সেভপয়েন্ট তৈরি করতে দেয় এবং একটি লেনদেনে একাধিক SAVEPOINT থাকতে পারে;
- রিলিজ সেভপয়েন্ট আইডেন্টিফায়ার; লেনদেনের একটি সেভপয়েন্ট মুছে ফেলুন, যখন নির্দিষ্ট সেভপয়েন্ট না থাকে, স্টেটমেন্ট এক্সিকিউট করলে একটি ব্যতিক্রম হবে;
- শনাক্তকারীর কাছে রোলব্যাক করুন; লেনদেনটিকে পয়েন্টে ফিরিয়ে দিন;
- লেনদেন সেট করুন; লেনদেনের বিচ্ছিন্নতা স্তর সেট করতে ব্যবহৃত হয়। InnoDB স্টোরেজ ইঞ্জিন দ্বারা প্রদত্ত লেনদেন বিচ্ছিন্নতা স্তরগুলি হল READ Uncommitted, READ Committed, REPEATable READ, এবং serializable.
MYSQL লেনদেন প্রক্রিয়াকরণের দুটি প্রধান পদ্ধতি রয়েছে:
1. অর্জন করতে BEGIN, ROLLBACK, COMMIT ব্যবহার করুন৷
- BEGIN একটি লেনদেন শুরু করুন
- রোলব্যাক লেনদেন রোলব্যাক
- সমর্পণ করা লেনদেন নিশ্চিতকরণ
2. MySQL-এর অটো-কমিট মোড পরিবর্তন করতে সরাসরি SET ব্যবহার করুন:
- অটোকমিট সেট করুন=0 অটো-কমিট অক্ষম করুন
- অটোকমিট সেট করুন=1 অটো-কমিট চালু করুন
লেনদেন পরীক্ষা
mysql> use chenweiliang; Database changed mysql> CREATE TABLE chenweiliang_transaction_test( id int(5)) engine=innodb; # 创建数据表 Query OK, 0 rows affected (0.04 sec) mysql> select * from chenweiliang_transaction_test; Empty set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test value(5); Query OK, 1 rows affected (0.01 sec) mysql> insert into chenweiliang_transaction_test value(6); Query OK, 1 rows affected (0.00 sec) mysql> commit; # 提交事务 Query OK, 0 rows affected (0.01 sec) mysql> select * from chenweiliang_transaction_test; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test values(7); Query OK, 1 rows affected (0.00 sec) mysql> rollback; # 回滚 Query OK, 0 rows affected (0.00 sec) mysql> select * from chenweiliang_transaction_test; # 因为回滚所以数据没有插入 +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql>
পিএইচপি-তে লেনদেনের উদাহরণ ব্যবহার করা
পরীক্ষা দ্বারা MySQL ক্রম:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8"); mysqli_select_db( $conn, 'chenweiliang' ); mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行 mysqli_begin_transaction($conn); // 开始事务定义 if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(8)")) { mysqli_query($conn, "ROLLBACK"); // 判断当执行失败时回滚 } if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(9)")) { mysqli_query($conn, "ROLLBACK"); // 判断执行失败时回滚 } mysqli_commit($conn); //执行事务 mysqli_close($conn); ?>
হোপ চেন উইলিয়াং ব্লগ ( https://www.chenweiliang.com/ ) শেয়ার করেছেন "MySQL ডেটাবেস লেনদেন রোলব্যাক আইসোলেশন/ওপেন কনসেপ্ট/লেভেল প্রসেসিং অফ PHP স্টেটমেন্ট", যা আপনার জন্য সহায়ক।
এই নিবন্ধটির লিঙ্ক শেয়ার করতে স্বাগতম:https://www.chenweiliang.com/cwl-494.html
সর্বশেষ আপডেট পেতে চেন ওয়েইলিয়াং এর ব্লগের টেলিগ্রাম চ্যানেলে স্বাগতম!
📚 এই গাইডটিতে বিশাল মূল্য রয়েছে, 🌟এটি একটি বিরল সুযোগ, এটি মিস করবেন না! ⏰⌛💨
ভালো লাগলে শেয়ার এবং লাইক করুন!
আপনার শেয়ার এবং লাইক আমাদের ক্রমাগত অনুপ্রেরণা!