دليل المادة
قاعدة بيانات MySQLعزل التراجع عن المعاملات / فتح المفهوم / مستوى معالجة بيان php
MySQL أمور
تُستخدم معاملات MySQL بشكل أساسي لمعالجة البيانات بكمية كبيرة من العمليات ودرجة عالية من التعقيد.على سبيل المثال ، في نظام إدارة شؤون الموظفين ، إذا قمت بحذف شخص ما ، فأنت بحاجة إلى حذف كل من المعلومات الأساسية للشخص والمعلومات المتعلقة به ، مثل صناديق البريد ، والمقالات ، وما إلى ذلك. وبهذه الطريقة ، فإن بيانات تشغيل قاعدة البيانات هذه تشكل صفقة!
- يتم دعم المعاملات في MySQL فقط لقواعد البيانات أو الجداول التي تستخدم محرك قاعدة بيانات Innodb.
- يمكن استخدام معالجة المعاملات للحفاظ على تكامل قاعدة البيانات ، مما يضمن تنفيذ جميع دفعات عبارات 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 WORK ، لكن الاثنين متكافئان. يلتزم COMMIT بالمعاملة ويجعل جميع التعديلات التي تم إجراؤها على قاعدة البيانات دائمة ؛
- ROLLBACK ؛ من الممكن استخدام ROLLBACK WORK ، لكن الاثنين متكافئان.ينهي التراجع معاملة المستخدم ويلغي كافة التعديلات غير الملتزم بها قيد التقدم ؛
- معرف SAVEPOINT ؛ يسمح SAVEPOINT بإنشاء نقطة حفظ في المعاملة ، ويمكن أن يكون هناك SAVEPOINTs متعددة في المعاملة ؛
- RELEASE SAVEPOINT Identifier ؛ حذف نقطة حفظ للمعاملة ، عندما لا يكون هناك نقطة حفظ محددة ، سيؤدي تنفيذ العبارة إلى استثناء ؛
- ROLLBACK TO المعرف ؛ استرجاع المعاملة إلى النقطة ؛
- SET TRACTACTION ؛ تستخدم لتعيين مستوى العزل للمعاملة. يوفر محرك التخزين InnoDB مستويات عزل المعاملات للقراءة غير الملتزمة ، والقراءة الملتزمة ، والقراءة المتكررة ، والتسلسل.
هناك طريقتان رئيسيتان لمعالجة معاملات MYSQL:
1. استخدم BEGIN ، ROLLBACK ، الالتزام لتحقيق ذلك
- ابدأ ابدأ صفقة
- رول باك التراجع عن المعاملة
- ارتكب تأكيد المعاملة
2. استخدم SET مباشرةً لتغيير وضع الالتزام التلقائي في MySQL:
- تعيين 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 ORDER BY:
<? 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); ?>
مدونة Hope Chen Weiliang ( https://www.chenweiliang.com/ ) شارك "عزل التراجع عن معاملات قاعدة بيانات MySQL / المفهوم المفتوح / معالجة المستوى لبيانات PHP" ، وهو أمر مفيد لك.
مرحبا بكم في مشاركة رابط هذه المقالة:https://www.chenweiliang.com/cwl-494.html
مرحبًا بك في قناة Telegram الخاصة بمدونة Chen Weiliang للحصول على آخر التحديثات!
📚 يحتوي هذا الدليل على قيمة كبيرة، 🌟هذه فرصة نادرة، لا تفوتها! ⏰⌛💨
شارك و اعجبك اذا اردت
مشاركتك وإعجاباتك هي دافعنا المستمر!