آرٹیکل ڈائرکٹری
MySQL ڈیٹا بیسٹرانزیکشن رول بیک آئسولیشن/اوپن کانسیپٹ/لیول پروسیسنگ پی ایچ پی اسٹیٹمنٹ
MySQL امور
MySQL ٹرانزیکشنز کا استعمال بنیادی طور پر ڈیٹا پر کارروائی کے لیے بڑی مقدار میں کارروائیوں اور اعلی پیچیدگی کے ساتھ کیا جاتا ہے۔مثال کے طور پر، پرسنل مینجمنٹ سسٹم میں، اگر آپ کسی شخص کو حذف کرتے ہیں، تو آپ کو اس شخص کی بنیادی معلومات اور اس شخص سے متعلق معلومات، جیسے میل باکس، مضامین وغیرہ دونوں کو حذف کرنے کی ضرورت ہے۔ اس طرح، یہ ڈیٹا بیس آپریشن اسٹیٹمنٹس۔ ایک لین دین کی تشکیل!
- 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؛ COMMIT WORK بھی استعمال کیا جا سکتا ہے، لیکن دونوں برابر ہیں۔ COMMIT لین دین کا ارتکاب کرتا ہے اور ڈیٹا بیس میں کی گئی تمام ترامیم کو مستقل بنا دیتا ہے۔
- رول بیک؛ رول بیک ورک کا استعمال ممکن ہے، لیکن دونوں برابر ہیں۔رول بیک صارف کے لین دین کو ختم کرتا ہے اور پیشرفت میں تمام غیر ارتکاب ترمیمات کو کالعدم کرتا ہے۔
- SAVEPOINT شناخت کنندہ؛ SAVEPOINT ایک ٹرانزیکشن میں ایک سیو پوائنٹ بنانے کی اجازت دیتا ہے، اور ایک ٹرانزیکشن میں متعدد SAVEPOINTs ہو سکتے ہیں۔
- سیوپوائنٹ شناخت کنندہ کو ریلیز کریں؛ کسی لین دین کے سیو پوائنٹ کو حذف کریں، جب کوئی مخصوص سیو پوائنٹ نہ ہو، بیان پر عمل کرنے سے استثنیٰ ہو جائے گا۔
- شناخت کنندہ پر رول بیک؛ لین دین کو پوائنٹ پر واپس لوٹائیں۔
- SET TRANSACTION؛ لین دین کی تنہائی کی سطح کو سیٹ کرنے کے لیے استعمال کیا جاتا ہے۔ InnoDB اسٹوریج انجن READ UNCOMMITTED، READ COMMITTED، REPEATable READ، اور SERIALIZABLE کی ٹرانزیکشن آئسولیشن لیول فراہم کرتا ہے۔
MYSQL ٹرانزیکشن پروسیسنگ کے دو اہم طریقے ہیں:
1. حاصل کرنے کے لیے BEGIN، ROLLBACK، COMMIT استعمال کریں۔
- براہ مہربانی دوبارہ کوشش کریں ایک لین دین شروع کریں
- رول بیک ٹرانزیکشن رول بیک
- کمیٹی لین دین کی تصدیق
2. MySQL کے آٹو کمٹ موڈ کو تبدیل کرنے کے لیے براہ راست SET استعمال کریں:
- AUTOCOMMIT=0 سیٹ کریں۔ آٹو کمٹ کو غیر فعال کریں۔
- AUTOCOMMIT=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 ڈیٹا بیس ٹرانزیکشن رول بیک آئسولیشن/اوپن کنسیپٹ/لیول پروسیسنگ آف پی ایچ پی اسٹیٹمنٹس" کا اشتراک کیا، جو آپ کے لیے مددگار ہے۔
اس مضمون کا لنک شیئر کرنے میں خوش آمدید:https://www.chenweiliang.com/cwl-494.html
تازہ ترین اپ ڈیٹس حاصل کرنے کے لیے چن ویلیانگ کے بلاگ کے ٹیلیگرام چینل میں خوش آمدید!
📚 یہ گائیڈ بہت بڑی قیمت پر مشتمل ہے، 🌟یہ ایک نادر موقع ہے، اس سے محروم نہ ہوں! ⏰⌛💨
پسند آئے تو شیئر اور لائک کریں!
آپ کا اشتراک اور پسندیدگی ہماری مسلسل حوصلہ افزائی ہے!