Imenik člankov
Baza podatkov MySQLIzjava php za izolacijo povrnitve transakcije/odprt koncept/ravnanje obdelave
MySQL Zadeve
Transakcije MySQL se večinoma uporabljajo za obdelavo podatkov z veliko količino operacij in visoko kompleksnostjo.Če na primer v sistemu za upravljanje osebja izbrišete osebo, morate izbrisati tako osnovne informacije o osebi kot informacije, povezane z osebo, kot so nabiralniki, članki itd. predstavlja transakcijo!
- Transakcije so v MySQL podprte samo za baze podatkov ali tabele, ki uporabljajo mehanizem baze podatkov Innodb.
- Obdelavo transakcij je mogoče uporabiti za vzdrževanje celovitosti baze podatkov, s čimer zagotovite, da se izvedejo vsi paketi stavkov SQL ali pa se ne izvede noben.
- Transakcije se uporabljajo za upravljanje izpiskov za vstavljanje, posodabljanje in brisanje
Na splošno mora transakcija izpolnjevati 4 pogoje (ACID): Atomicity (atomičnost), Consistency (stabilnost), Isolation (izolacija), Durability (zanesljivost)
- 1,Atomičnost transakcij:Niz transakcij, ki bodisi uspejo bodisi se umaknejo.
- 2,stabilnost:Obstajajo nezakoniti podatki (omejitve tujega ključa in podobno) in transakcija je umaknjena.
- 3,Izolacija:Transakcije potekajo neodvisno.Če rezultat transakcije vpliva na druge transakcije, bodo druge transakcije preklicane.100% izolacija transakcij na račun hitrosti.
- 4,zanesljivost:Po zrušitvi programske in strojne opreme bo gonilnik podatkovne tabele InnoDB uporabil datoteko dnevnika, da jo rekonstruira in spremeni.Zanesljivost in visoka hitrost ne moreta imeti obojega, možnost innodb_flush_log_at_trx_commit določa, kdaj shraniti transakcije v dnevnik.
Pod privzetimi nastavitvami ukazne vrstice MySQL se transakcije potrdijo samodejno, kar pomeni, da bo operacija COMMIT izvedena takoj po izvedbi stavka SQL.Zato morate za izrecno odpiranje transakcije uporabiti ukaz BEGIN ali START TRANSACTION ali izvesti ukaz SET AUTOCOMMIT=0, da onemogočite uporabo samodejne potrditve za trenutno sejo.
Izjava o nadzoru transakcij:
- ZAČETI ali ZAČETI TRANSAKCIJO; izrecno začeti transakcijo;
- Uporabite lahko tudi COMMIT; COMMIT WORK, vendar sta enakovredni. COMMIT potrdi transakcijo in naredi vse spremembe baze podatkov trajne;
- ROLLBACK; mogoče je uporabiti ROLLBACK WORK, vendar sta enakovredni.Povrnitev nazaj konča uporabnikovo transakcijo in razveljavi vse neobvezne spremembe v teku;
- SAVEPOINT identifikator; SAVEPOINT omogoča ustvarjanje točke shranjevanja v transakciji, v transakciji pa je lahko več SAVEPOINT-ov;
- Identifikator RELEASE SAVEPOINT; izbrišite točko shranjevanja transakcije, če ni določene točke shranjevanja, bo izvedba stavka sprožila izjemo;
- Identifikator ROLLBACK TO; vrnitev transakcije do točke;
- SET TRANSACTION; uporablja se za nastavitev stopnje izolacije transakcije. Ravni izolacije transakcij, ki jih zagotavlja mehanizem za shranjevanje InnoDB, so READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ in SERIALIZABLE.
Obstajata dve glavni metodi obdelave transakcij MYSQL:
1. Uporabite BEGIN, ROLLBACK, COMMIT, da dosežete
- ZAČETI začeti transakcijo
- POVRAT povrnitev transakcije
- OBVEZNO Potrditev transakcije
2. Uporabite neposredno SET, da spremenite način samodejne potrditve MySQL:
- NASTAVITE SAMODEJO=0 Onemogoči samodejno potrditev
- NASTAVITE SAMODEJO=1 Vklopi samodejno potrditev
transakcijski test
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>
Uporaba primerkov transakcij v PHP
MySQL ORDER BY test:
<? 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); ?>
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) je delil "Izolacijo povrnitve transakcij baze podatkov MySQL/Odprt koncept/Ravno obdelavo izjav PHP", ki vam je v pomoč.
Dobrodošli, da delite povezavo tega članka:https://www.chenweiliang.com/cwl-494.html
Dobrodošli na kanalu Telegram spletnega dnevnika Chena Weilianga, kjer boste prejeli najnovejše posodobitve!
📚 Ta vodnik ima ogromno vrednosti, 🌟To je redka priložnost, ne zamudite je! ⏰⌛💨
Delite in všečkajte, če vam je všeč!
Vaše deljenje in všečki so naša stalna motivacija!