Maqolalar katalogi
MySQL ma'lumotlar bazasiTranzaksiyani orqaga qaytarish izolyatsiyasi/ochiq kontseptsiya/darajani qayta ishlash PHP bayonoti
MySQL Ishlar
MySQL tranzaksiyalari asosan katta hajmdagi operatsiyalar va yuqori murakkablikdagi ma'lumotlarni qayta ishlash uchun ishlatiladi.Misol uchun, xodimlarni boshqarish tizimida, agar siz shaxsni o'chirsangiz, siz shaxsning asosiy ma'lumotlarini ham, pochta qutilari, maqolalar va boshqalar kabi shaxsga tegishli ma'lumotlarni ham o'chirishingiz kerak. Shu tarzda, ushbu ma'lumotlar bazasi operatsiya bayonotlari tranzaktsiyani tashkil eting!
- MySQL-da tranzaktsiyalar faqat Innodb ma'lumotlar bazasi mexanizmidan foydalanadigan ma'lumotlar bazalari yoki jadvallar uchun qo'llab-quvvatlanadi.
- Tranzaksiyalarni qayta ishlash ma'lumotlar bazasining yaxlitligini ta'minlash uchun ishlatilishi mumkin, bu SQL bayonotlarining to'plamlari yoki hammasi bajarilganligini yoki ularning hech biri bajarilmasligini ta'minlaydi.
- Tranzaksiyalar qo'shish, yangilash, o'chirish bayonotlarini boshqarish uchun ishlatiladi
Umuman olganda, tranzaktsiya 4 shartga javob berishi kerak (ACID): Atomlik (atomlik), izchillik (barqarorlik), izolyatsiya (izolyatsiya), chidamlilik (ishonchlilik)
- 1,Tranzaktsiyalarning atomligi:Muvaffaqiyatli yoki qaytarib olingan operatsiyalar to'plami.
- 2,barqarorlik:Noqonuniy ma'lumotlar mavjud (xorijiy kalit cheklovlari va shunga o'xshashlar) va tranzaktsiya bekor qilinadi.
- 3,Izolyatsiya:Bitimlar mustaqil ravishda amalga oshiriladi.Agar bitim natijasi boshqa tranzaktsiyalarga ta'sir etsa, boshqa operatsiyalar bekor qilinadi.Tezlik hisobiga tranzaktsiyalarni 100% izolyatsiya qilish.
- 4,ishonchlilik:Dasturiy ta'minot va apparat ishdan chiqqandan so'ng, InnoDB ma'lumotlar jadvali drayveri uni qayta qurish va o'zgartirish uchun jurnal faylidan foydalanadi.Ishonchlilik va yuqori tezlik ikkalasiga ham ega bo'lolmaydi, innodb_flush_log_at_trx_commit opsiyasi tranzaktsiyalarni jurnalga qachon saqlashni aniqlaydi.
MySQL buyruq qatorining standart sozlamalari ostida tranzaktsiyalar avtomatik ravishda amalga oshiriladi, ya'ni COMMIT operatsiyasi SQL bayonoti bajarilgandan so'ng darhol amalga oshiriladi.Shuning uchun tranzaktsiyani aniq ochish uchun BEGIN yoki START TRANSACTION buyrug'idan foydalanish yoki joriy seans uchun avtomatik commitdan foydalanishni o'chirish uchun SET AUTOCOMMIT=0 buyrug'ini bajarish kerak.
Tranzaksiya nazorati bayonoti:
- BEGIN yoki START TRANSACTION; tranzaksiyani aniq boshlash;
- COMMIT; COMMIT WORK-dan ham foydalanish mumkin, ammo ikkalasi ham tengdir. COMMIT tranzaktsiyani amalga oshiradi va ma'lumotlar bazasiga kiritilgan barcha o'zgartirishlarni doimiy qiladi;
- ROLLBACK; ROLLBACK WORK-dan foydalanish mumkin, lekin ikkalasi ham bir xil.Orqaga qaytarish foydalanuvchi tranzaksiyasini tugatadi va amalga oshirilayotgan barcha o'zgartirishlarni bekor qiladi;
- SAVEPOINT identifikatori;SAVEPOINT tranzaksiyada saqlash nuqtasini yaratishga imkon beradi va tranzaksiyada bir nechta SAVEPOINT bo'lishi mumkin;
- RELEASE SAVEPOINT identifikatori; tranzaksiyaning saqlash nuqtasini o'chirish, agar ko'rsatilgan saqlash nuqtasi bo'lmasa, bayonotni bajarish istisnoga olib keladi;
- Identifikatorga ROLLBACK TO; tranzaksiyani nuqtaga qaytarish;
- SET TRANSACTION; tranzaktsiyaning izolyatsiya darajasini belgilash uchun ishlatiladi. InnoDB saqlash mexanizmi READ UNCOMMITTED, READ COMMITTED, REPEATable O'QISH va SERIALIZABLE tranzaksiyalarni izolyatsiya qilish darajalarini ta'minlaydi.
MYSQL tranzaksiyalarini qayta ishlashning ikkita asosiy usuli mavjud:
1. Bunga erishish uchun BEGIN, ROLLACK, COMMIT dan foydalaning
- BOSHLASH tranzaktsiyani boshlash
- Qaytish tranzaksiyani qaytarish
- QO'ShIMChA Tranzaksiyani tasdiqlash
2. MySQL-ning avtomatik qabul qilish rejimini o'zgartirish uchun to'g'ridan-to'g'ri SET-dan foydalaning:
- AUTOCOMMIT = 0 ni oʻrnatish Avtomatik qabul qilishni o'chirib qo'ying
- AUTOCOMMIT = 1 ni oʻrnatish Avtomatik topshirishni yoqing
tranzaksiya testi
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 da tranzaksiya misollaridan foydalanish
MySQL-ni sinov bo'yicha BUYURTISH:
<? 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); ?>
Umid qilamanki, Chen Veyliang blogi ( https://www.chenweiliang.com/ ) siz uchun foydali boʻlgan “MySQL maʼlumotlar bazasi tranzaktsiyasini qaytarish izolyatsiyasi/Ochiq kontseptsiya/PHP bayonotlarini darajasida qayta ishlash” bilan boʻlishdi.
Ushbu maqolaning havolasini baham ko'rish uchun xush kelibsiz:https://www.chenweiliang.com/cwl-494.html
Eng so'nggi yangiliklardan xabardor bo'lish uchun Chen Veyliang blogining Telegram kanaliga xush kelibsiz!
📚 Ushbu qo'llanmada katta ahamiyatga ega, 🌟Bu kamdan-kam imkoniyat, uni qo'ldan boy bermang! ⏰⌛💨
Baham ko'ring va yoqsa like!
Sizning baham ko'rish va yoqtirishlaringiz bizning doimiy motivatsiyamizdir!