Article Directory
MySQL baza podatakaphp iskaz izolacije/otvorenog koncepta/obrade na nivou transakcije
MySQL Poslovi
MySQL transakcije se uglavnom koriste za obradu podataka sa velikom količinom operacija i visoke složenosti.Na primjer, u sistemu upravljanja kadrovima, ako izbrišete osobu, potrebno je da izbrišete i osnovne podatke o osobi i informacije vezane za osobu, kao što su poštanski sandučići, članci itd. Na taj način, ove izjave o radu baze podataka predstavlja transakciju!
- Transakcije su podržane u MySQL-u samo za baze podataka ili tabele koje koriste Innodb mehanizam baze podataka.
- Obrada transakcija se može koristiti za održavanje integriteta baze podataka, osiguravajući da se grupe SQL izraza ili izvrše svi ili da se nijedan od njih ne izvrši.
- Transakcije se koriste za upravljanje izjavama za umetanje, ažuriranje, brisanje
Uopšteno govoreći, transakcija mora ispunjavati 4 uslova (ACID): Atomičnost (atomičnost), Konzistentnost (stabilnost), Izolacija (izolacija), Trajnost (pouzdanost)
- 1 、Atomičnost transakcija:Skup transakcija, uspješnih ili povučenih.
- 2 、stabilnost:Postoje nezakoniti podaci (ograničenja stranog ključa i slično), a transakcija se povlači.
- 3 、Izolacija:Transakcije se odvijaju nezavisno.Ako rezultat transakcije utiče na druge transakcije, onda će druge transakcije biti povučene.100% izolacija transakcija, što zahtijeva žrtvovanje brzine.
- 4 、pouzdanost:Nakon pada softvera i hardvera, upravljački program tablice podataka InnoDB koristit će datoteku dnevnika da je rekonstruiše i modificira.Pouzdanost i velika brzina ne mogu imati oboje, opcija innodb_flush_log_at_trx_commit određuje kada treba sačuvati transakcije u dnevnik.
Pod zadanim postavkama MySQL komandne linije, transakcije se automatski predaju, to jest, operacija COMMIT će se izvršiti odmah nakon što se izvrši SQL naredba.Stoga, da biste eksplicitno otvorili transakciju, morate koristiti naredbu BEGIN ili START TRANSACTION, ili izvršiti naredbu SET AUTOCOMMIT=0, da onemogućite korištenje automatskog urezivanja za trenutnu sesiju.
Izjava o kontroli transakcije:
- POČNI ili POČNI TRANSAKCIJU; eksplicitno započeti transakciju;
- COMMIT; COMMIT WORK se takođe može koristiti, ali su ta dva ekvivalenta. COMMIT urezuje transakciju i čini sve modifikacije napravljene u bazi podataka trajnim;
- ROLLBACK; moguće je koristiti ROLLBACK WORK, ali su ta dva ekvivalenta.Vraćanje unatrag završava transakciju korisnika i poništava sve nepovezane modifikacije u toku;
- SAVEPOINT identifikator; SAVEPOINT omogućava kreiranje točke spremanja u transakciji, a može biti više SAVEPOINT u transakciji;
- RELEASE SAVEPOINT identifikator, izbrišite tačku spremanja transakcije, kada nema specificirane tačke spremanja, izvršavanje naredbe će baciti izuzetak;
- ROLLBACK TO identifikator, vratite transakciju na tačku;
- POSTAVI TRANSAKCIJU; koristi se za postavljanje razine izolacije transakcije. InnoDB mehanizam za skladištenje obezbeđuje nivoe izolacije transakcija READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ i SERIALIZABLE.
Postoje dvije glavne metode obrade MYSQL transakcija:
1. Koristite BEGIN, ROLLBACK, COMMIT da postignete
- BEGIN započeti transakciju
- VRAĆANJE vraćanje transakcije
- OBVEZI Potvrda transakcije
2. Koristite SET direktno da promijenite MySQL-ov način automatskog urezivanja:
- POSTAVI AUTOCOMMIT=0 Onemogući automatsko urezivanje
- POSTAVI AUTOCOMMIT=1 Uključite automatsko upisivanje
test transakcije
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>
Korištenje instanci transakcija u PHP-u
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); ?>
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) je podijelio "Izolacija povrata transakcije MySQL baze podataka/Otvoreni koncept/Obrada na nivou PHP izjava", što vam je od pomoći.
Dobrodošli da podijelite link ovog članka:https://www.chenweiliang.com/cwl-494.html
Dobrodošli na Telegram kanal bloga Chen Weilianga kako biste dobili najnovije informacije!
📚 Ovaj vodič ima ogromnu vrijednost, 🌟Ovo je rijetka prilika, ne propustite je! ⏰⌛💨
Podelite i lajkujte ako želite!
Vaše dijeljenje i lajkovi su naša stalna motivacija!