آرٽيڪل ڊاريڪٽري
MySQL ڊيٽابيسٽرانزيڪشن رول بيڪ آئسوليشن/ اوپن تصور/ ليول پروسيسنگ php بيان
هن MySQL معاملن
MySQL ٽرانزيڪشن خاص طور تي ڊيٽا کي پروسيس ڪرڻ لاء استعمال ڪيو ويندو آهي وڏي مقدار جي عملن ۽ اعلي پيچيدگي سان.مثال طور، پرسنل مئنيجمينٽ سسٽم ۾، جيڪڏهن توهان هڪ شخص کي حذف ڪريو ٿا، توهان کي ان شخص جي بنيادي معلومات ۽ ان شخص سان لاڳاپيل معلومات، جهڙوڪ ميل باڪس، آرٽيڪل وغيره کي حذف ڪرڻ جي ضرورت آهي، انهي طريقي سان، اهي ڊيٽابيس آپريشن بيانات. هڪ ٽرانزيڪشن ٺاهيو!
- MySQL ۾ ٽرانزيڪشنز صرف ڊيٽابيسس يا جدولن لاءِ سپورٽ ڪن ٿيون جيڪي Inodb ڊيٽابيس انجڻ استعمال ڪن ٿيون.
- ٽرانزيڪشن پروسيسنگ ڊيٽابيس جي سالميت کي برقرار رکڻ لاءِ استعمال ٿي سگهي ٿي، انهي ڳالهه کي يقيني بڻائڻ ته SQL بيانن جا بيچ يا ته سڀ عمل ڪيا ويا آهن يا انهن مان ڪو به عمل نه ڪيو ويو آهي.
- ٽرانزيڪشن داخل ڪرڻ، تازه ڪاري ڪرڻ، بيانن کي ختم ڪرڻ لاء استعمال ڪيو ويندو آهي
عام طور تي ڳالهائڻ، هڪ ٽرانزيڪشن کي لازمي طور تي 4 شرطن (ACID) کي پورا ڪرڻ گهرجي: ايٽمي (ائٽميٽي)، استحڪام (استحکام)، الڳ ڪرڻ (تنقيد)، استحڪام (مؤسسيت)
- 1،ٽرانزيڪشن جي ايٽمييت:ٽرانزيڪشن جو هڪ سيٽ جيڪو ڪامياب ٿئي ٿو يا واپس وٺي ٿو.
- 2،استحڪام:هتي غير قانوني ڊيٽا آهي (پرڏيهي اهم رڪاوٽون ۽ جهڙوڪ)، ۽ ٽرانزيڪشن واپس ورتو ويو آهي.
- 3،اڪيلائي:ٽرانزيڪشن آزاديء سان هلن ٿا.جيڪڏهن هڪ ٽرانزيڪشن جو نتيجو ٻين ٽرانزيڪشن تي اثر انداز ٿئي ٿو، ته پوء ٻين ٽرانزيڪشن کي واپس ورتو ويندو.100٪ ٽرانزيڪشن جي اڪيلائي، جيڪا رفتار جي قرباني جي ضرورت آهي.
- 4،اعتبار:سافٽ ويئر ۽ هارڊويئر حادثي کان پوء، InnoDB ڊيٽا ٽيبل ڊرائيور لاگ فائل کي استعمال ڪندي ان کي ٻيهر ٺاهڻ ۽ تبديل ڪرڻ لاء.قابل اعتماد ۽ تيز رفتار ٻئي نه ٿا ٿي سگهن، innodb_flush_log_at_trx_commit آپشن اهو طئي ڪري ٿو جڏهن ٽرانزيڪشن کي لاگ ۾ محفوظ ڪيو وڃي.
MySQL ڪمانڊ لائن جي ڊفالٽ سيٽنگن جي تحت، ٽرانزيڪشن پاڻمرادو انجام ڏنو ويندو آھي، اھو آھي، COMMIT آپريشن فوري طور تي انجام ڏنو ويندو SQL بيان تي عمل ٿيڻ کان پوءِ.تنهن ڪري، هڪ ٽرانزيڪشن کي واضح طور تي کولڻ لاءِ ڪمانڊ BEGIN يا START TRANSACTION استعمال ڪرڻ گهرجي، يا ڪمانڊ SET AUTOCOMMIT=0 تي عمل ڪرڻ گهرجي، موجوده سيشن لاءِ خودڪار ڪمٽ جي استعمال کي غير فعال ڪرڻ لاءِ.
ٽرانزيڪشن ڪنٽرول بيان:
- ٽرانزيڪشن شروع ڪريو يا شروع ڪريو؛ واضح طور تي ٽرانزيڪشن شروع ڪريو؛
- COMMIT؛ ڪم ڪرڻ جو ڪم پڻ استعمال ڪري سگھجي ٿو، پر ٻئي برابر آھن. COMMIT ٽرانزيڪشن کي انجام ڏئي ٿو ۽ ڊيٽابيس ۾ ڪيل سڀني تبديلين کي مستقل ڪري ٿو؛
- ROLLBACK؛ ROLLBACK WORK استعمال ڪرڻ ممڪن آھي، پر ٻئي برابر آھن.رولبڪ صارف جي ٽرانزيڪشن کي ختم ڪري ٿو ۽ ترقي ۾ سڀني غير منظم تبديلين کي رد ڪري ٿو؛
- SAVEPOINT سڃاڻپ ڪندڙ؛ SAVEPOINT هڪ ٽرانزيڪشن ۾ محفوظ پوائنٽ ٺاهڻ جي اجازت ڏئي ٿو، ۽ هڪ ٽرانزيڪشن ۾ ڪيترائي SAVEPOINTs ٿي سگهن ٿا.
- ريليز SAVEPOINT سڃاڻپ ڪندڙ؛ ٽرانزيڪشن جي هڪ محفوظ پوائنٽ کي حذف ڪريو، جڏهن ڪو خاص محفوظ پوائنٽ نه هوندو، بيان تي عمل ڪرڻ هڪ استثنا اڇلائي ڇڏيندو؛
- سڃاڻپ ڪندڙ ڏانهن ROLLBACK؛ ٽرانزيڪشن کي پوائنٽ ڏانهن واپس آڻيو؛
- سيٽ ٽرانزيڪشن؛ ٽرانزيڪشن جي اڪيلائي جي سطح کي سيٽ ڪرڻ لاء استعمال ڪيو ويو. 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>
PHP ۾ ٽرانزيڪشن مثال استعمال ڪندي
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 Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements" شيئر ڪيو، جيڪو توھان لاءِ مددگار آھي.
هن آرٽيڪل جي لنڪ کي حصيداري ڪرڻ لاء ڀليڪار:https://www.chenweiliang.com/cwl-494.html
وڌيڪ لڪيل چالون کولڻ لاءِ🔑، اسان جي ٽيليگرام چينل ۾ شامل ٿيڻ لاءِ ڀليڪار!
شئير ڪريو ۽ پسند ڪريو جيڪڏھن توھان کي پسند اچي! توهان جا حصا ۽ پسند اسان جي مسلسل حوصلا آهن!