Rakstu katalogs
MySQL datu bāzeDarījuma atcelšanas izolācija/atvērta koncepcija/līmeņa apstrādes php paziņojums
MySQL Lietās
MySQL transakcijas galvenokārt tiek izmantotas, lai apstrādātu datus ar lielu darbību apjomu un augstu sarežģītību.Piemēram, personāla vadības sistēmā, dzēšot personu, ir jāizdzēš gan personas pamatinformācija, gan ar personu saistītā informācija, piemēram, pastkastītes, raksti u.c. Tādā veidā šie datu bāzes darbības paziņojumi veido darījumu!
- Darījumi MySQL tiek atbalstīti tikai datu bāzēm vai tabulām, kurās tiek izmantots Innodb datu bāzes dzinējs.
- Darījumu apstrādi var izmantot, lai saglabātu datubāzes integritāti, nodrošinot, ka tiek izpildītas visas SQL priekšrakstu partijas vai netiek izpildīta neviena no tām.
- Darījumi tiek izmantoti, lai pārvaldītu izrakstu ievietošanu, atjaunināšanu, dzēšanu
Vispārīgi runājot, darījumam ir jāatbilst 4 nosacījumiem (ACID): atomitāte (atomiskums), konsekvence (stabilitāte), izolācija (izolācija), izturība (uzticamība)
- 1,Darījumu atomiskums:Darījumu kopums, kas izdodas vai tiek atsaukts.
- 2,stabilitāte:Ir nelikumīgi dati (ārvalstu atslēgu ierobežojumi un tamlīdzīgi), un darījums tiek atsaukts.
- 3,Izolācija:Darījumi tiek veikti neatkarīgi.Ja darījuma rezultāts ietekmēs citus darījumus, citi darījumi tiks atsaukti.100% darījumu izolācija uz ātruma rēķina.
- 4,uzticamība:Pēc programmatūras un aparatūras avārijas InnoDB datu tabulas draiveris izmantos žurnāla failu, lai to rekonstruētu un modificētu.Uzticamībai un lielam ātrumam nevar būt abas, opcija innodb_flush_log_at_trx_commit nosaka, kad žurnālā jāsaglabā darījumi.
Saskaņā ar MySQL komandrindas noklusējuma iestatījumiem transakcijas tiek veiktas automātiski, tas ir, operācija COMMIT tiks izpildīta tūlīt pēc SQL priekšraksta izpildes.Tāpēc, lai skaidri atvērtu transakciju, ir jāizmanto komanda BEGIN vai START TRANSACTION vai jāizpilda komanda SET AUTOCOMMIT=0, lai atspējotu automātiskās izpildes izmantošanu pašreizējā sesijā.
Darījuma kontroles paziņojums:
- SĀKT vai SĀKT DARĪJUMU; skaidri sākt darījumu;
- COMMIT; COMMIT WORK var izmantot arī, bet abi ir līdzvērtīgi. COMMIT veic transakciju un padara visas datubāzē veiktās izmaiņas par pastāvīgām;
- ROLLBACK; ir iespējams izmantot ROLLBACK WORK, bet abi ir līdzvērtīgi.Atcelšana beidz lietotāja transakciju un atsauc visas nenodarītās izmaiņas;
- SAVEPOINT identifikators; SAVEPOINT ļauj darījumā izveidot saglabāšanas punktu, un darījumā var būt vairāki SAVEPOINT;
- RELEASE SAVEPOINT identifikators, dzēst darījuma saglabāšanas punktu, ja nav norādīts saglabāšanas punkts, izpildot paziņojumu, tiks parādīts izņēmums;
- ROLLBACK TO identifikators, atceliet darījumu uz punktu;
- SET TRANSACTION; izmanto, lai iestatītu darījuma izolācijas līmeni. InnoDB krātuves dzinēja nodrošinātie darījumu izolācijas līmeņi ir READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ un SERIALIZABLE.
Ir divas galvenās MYSQL darījumu apstrādes metodes:
1. Izmantojiet BEGIN, ROLLBACK, COMMIT, lai sasniegtu
- BEGIN sākt darījumu
- ATPAKAĻ darījuma atcelšana
- COMMIT Darījuma apstiprinājums
2. Izmantojiet SET tieši, lai mainītu MySQL automātiskās izpildes režīmu:
- SETAUTOCOMMIT=0 Atspējot automātisko apstiprināšanu
- SETAUTOCOMMIT=1 Ieslēdziet automātisko apstiprināšanu
darījumu tests
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>
Darījumu gadījumu izmantošana PHP
MySQL ORDER BY tests:
<? 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 emuārs ( https://www.chenweiliang.com/ ).
Laipni lūdzam kopīgot šī raksta saiti:https://www.chenweiliang.com/cwl-494.html
Laipni lūdzam Chen Weiliang emuāra Telegram kanālā, lai saņemtu jaunākos atjauninājumus!
📚 Šajā rokasgrāmatā ir milzīga vērtība, 🌟Šī ir reta iespēja, nepalaidiet to garām! ⏰⌛💨
Dalies un patīk, ja patīk!
Jūsu kopīgošana un atzīmes Patīk ir mūsu nepārtraukta motivācija!