مقالې لارښود
د MySQL ډیټابیسد لیږد رول بیک جلا کول / خلاص مفهوم / د کچې پروسس کولو پی ایچ پی بیان
مای امور
د MySQL لیږدونه په عمده توګه د ډیرو عملیاتو او لوړ پیچلتیا سره د معلوماتو پروسس کولو لپاره کارول کیږي.د مثال په توګه، د پرسونل مدیریت سیسټم کې، که تاسو یو شخص حذف کړئ، نو تاسو اړتیا لرئ چې د شخص لومړني معلومات او د هغه شخص پورې اړوند معلومات لکه میل باکسونه، مقالې، او نور حذف کړئ. په دې توګه، د دې ډیټابیس عملیات بیانات یوه معامله جوړه کړئ!
- لیږدونه په MySQL کې یوازې د ډیټابیسونو یا میزونو لپاره ملاتړ کیږي چې د Innodb ډیټابیس انجن کاروي.
- د لیږد پروسس کول د ډیټابیس بشپړتیا ساتلو لپاره کارول کیدی شي، دا ډاډ ترلاسه کوي چې د SQL بیانونو بستې یا ټول اعدام شوي یا هیڅ یو یې نه اجرا کیږي.
- لیږدونه د بیاناتو داخلولو ، تازه کولو ، حذف کولو اداره کولو لپاره کارول کیږي
په عموم ډول، معامله باید څلور شرایط پوره کړي (ACID): اټوميیت (اټومیتیا)، ثبات (ثبات)، انزوا (تنازل)، دوام (د اعتبار)
- 1،د راکړې ورکړې اټوميیت:د راکړې ورکړې یوه مجموعه چې یا بریالۍ کیږي یا بیرته اخیستل کیږي.
- 2،ثبات:غیرقانوني معلومات شتون لري (بهرني کلیدي خنډونه او ورته ورته)، او معامله بیرته اخیستل کیږي.
- 3،انزوا:راکړه ورکړه په خپلواکه توګه پرمخ ځي.که د یوې معاملې پایله په نورو معاملو اغیزه وکړي، نو نورې معاملې به بیرته واخیستل شي.د سرعت په لګښت کې د معاملو 100٪ جلا کول.
- 4،اعتبار:د سافټویر او هارډویر حادثې وروسته، د InnoDB ډیټا جدول ډرایور به د لاګ فایل د بیا رغونې او ترمیم لپاره وکاروي.اعتبار او لوړ سرعت دواړه نه لري، د innodb_flush_log_at_trx_commit اختیار ټاکي چې کله په لاګ کې لیږدونه خوندي کړي.
د MySQL کمانډ لاین د ډیفالټ ترتیباتو لاندې، لیږدونه په اوتومات ډول ترسره کیږي، دا دی، د COMMIT عملیات به سمدلاسه د SQL بیان اجرا کیدو وروسته اجرا شي.له همدې امله ، په ښکاره ډول د لیږد خلاصولو لپاره باید د BEGIN یا START TRANSACTION کمانډ وکاروئ ، یا د SET AUTOCOMMIT=0 کمانډ اجرا کړئ ، ترڅو د اوسني ناستې لپاره د اتوماتیک ژمنې کارول غیر فعال کړئ.
د راکړې ورکړې کنټرول بیان:
- د راکړې ورکړې پیل یا پیل کړئ؛ په ښکاره ډول معامله پیل کړئ؛
- COMMIT؛ Commit WORK هم کارول کیدی شي، مګر دواړه مساوي دي. COMMIT معامله ترسره کوي او په ډیټابیس کې ټول بدلونونه دایمي کوي؛
- ROLLBACK؛ دا ممکنه ده چې د رول بیک کار وکاروئ، مګر دواړه مساوي دي.رول بیک د کارونکي لیږد پای ته رسوي او ټول غیر ژمن بدلونونه چې په پرمختګ کې دي بیرته راګرځوي؛
- SAVEPOINT پیژندونکی؛ SAVEPOINT اجازه ورکوي چې په راکړه ورکړه کې خوندي نقطه رامینځته کړي، او په یوه معامله کې ډیری SAVEPOINTs شتون لري؛
- د سپوږمکۍ پیژندونکی خپور کړئ؛ د لیږد خوندي نقطه حذف کړئ، کله چې د خوندي کولو مشخص ځای شتون نلري، د بیان اجرا کول به یو استثنا وي؛
- ROLLBACK پیژندونکي ته؛ د راکړې ورکړې بیرته ټکي ته واړوئ؛
- د راکړې ورکړې تنظیم کول؛ د لیږد د جلا کولو کچه ټاکلو لپاره کارول کیږي. د InnoDB ذخیره کولو انجن لخوا چمتو شوي د لیږد انزوا کچه د READ UNCOMMITTED، د ژمنې لوستل، د تکرار وړ لوستل، او د لړۍ وړ دي.
د MYSQL لیږد پروسس کولو دوه اصلي میتودونه شتون لري:
1. د لاسته راوړلو لپاره BEGIN، ROLLBACK، COMMIT وکاروئ
- پيل كيدل؛ شروع كيدل: او چنېدل، راوتل یوه معامله پیل کړئ
- رولبیک د راکړې ورکړې بیرته راګرځول
- کمیټه د راکړې ورکړې تصدیق
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 ډیټابیس لیږد رول بیک انزول / خلاص مفهوم / د پی ایچ پی بیانونو کچه پروسس کول" شریک کړل، کوم چې ستاسو لپاره ګټور دی.
د دې مقالې لینک شریکولو ته ښه راغلاست:https://www.chenweiliang.com/cwl-494.html
د وروستي تازه معلوماتو ترلاسه کولو لپاره د چن ویلیانګ بلاګ ټیلیګرام چینل ته ښه راغلاست!
📚 دا لارښود لوی ارزښت لري، 🌟دا یو نادر فرصت دی، له لاسه مه ورکوئ! ⏰⌛💨
که مو خوښه شوه لایک او شریک کړئ!
ستاسو شریکول او خوښول زموږ دوامداره هڅونه ده!