Imenik članaka
MySQL baza podatakaIzolacija vraćanja transakcije/otvoreni koncept/razina obrade php izjava
MySQL Poslovi
MySQL transakcije se uglavnom koriste za obradu podataka s velikim brojem operacija i visoke složenosti.Na primjer, u sustavu upravljanja kadrovima, ako izbrišete osobu, trebate izbrisati i osnovne podatke o osobi i podatke koji se odnose na osobu, kao što su poštanski sandučići, članci itd. Na taj način ovi podaci o radu baze podataka predstavljaju transakciju!
- Transakcije su podržane u MySQL samo za baze podataka ili tablice koje koriste Innodb bazu podataka.
- Obrada transakcija može se koristiti za održavanje integriteta baze podataka, osiguravajući da se serije SQL naredbi ili sve izvrše ili da se ne izvrši niti jedna.
- Transakcije se koriste za upravljanje umetanjem, ažuriranjem i brisanjem izjava
Općenito govoreći, transakcija mora zadovoljiti 4 uvjeta (ACID): Atomicity (atomičnost), Consistency (stabilnost), Isolation (izolacija), Durability (pouzdanost)
- 1,Atomičnost transakcija:Skup transakcija koje ili uspiju ili se povuku.
- 2,stabilnost:Postoje ilegalni podaci (ograničenja stranog ključa i slično) i transakcija je povučena.
- 3,Izolacija:Transakcije se odvijaju neovisno.Ako rezultat transakcije utječe na druge transakcije, ostale će se transakcije povući.100% izolacija transakcija nauštrb brzine.
- 4,pouzdanost:Nakon pada softvera i hardvera, upravljački program tablice podataka InnoDB koristit će datoteku dnevnika da je rekonstruira i modificira.Pouzdanost i velika brzina ne mogu imati oboje, opcija innodb_flush_log_at_trx_commit određuje kada treba spremiti transakcije u dnevnik.
Prema zadanim postavkama MySQL naredbenog retka, transakcije se automatski potvrđuju, to jest, operacija COMMIT će se izvršiti odmah nakon što se izvrši SQL naredba.Stoga, za izričito otvaranje transakcije morate koristiti naredbu BEGIN ili START TRANSACTION, ili izvršiti naredbu SET AUTOCOMMIT=0, da onemogućite upotrebu automatskog predavanja za trenutnu sesiju.
Izjava o kontroli transakcije:
- POČETI ili POKRETATI TRANSAKCIJU; eksplicitno započeti transakciju;
- COMMIT; COMMIT WORK se također može koristiti, ali su dva ekvivalentna. COMMIT obvezuje transakciju i čini sve izmjene u bazi podataka trajnim;
- ROLLBACK; moguće je koristiti ROLLBACK WORK, ali ta dva su ekvivalentna.Vraćanje na staro stanje završava korisničku transakciju i poništava sve neizvršene izmjene koje su u tijeku;
- SAVEPOINT identifikator; SAVEPOINT omogućuje stvaranje točke spremanja u transakciji, a može biti više SAVEPOINT-ova u transakciji;
- RELEASE SAVEPOINT identifikator; izbrišite točku spremanja transakcije, kada ne postoji navedena točka spremanja, izvršavanje naredbe izbacit će iznimku;
- ROLLBACK TO identifikator;vratiti transakciju do točke;
- SET TRANSACTION; koristi se za postavljanje razine izolacije transakcije. InnoDB mehanizam za pohranu pruža razine izolacije transakcije READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ i SERIALIZABLE.
Postoje dvije glavne metode obrade MYSQL transakcija:
1. Koristite BEGIN, ROLLBACK, COMMIT za postizanje
- POČETI započeti transakciju
- VRAĆANJE povrat transakcije
- POČINITI Potvrda transakcije
2. Upotrijebite izravno SET za promjenu MySQL-ovog auto-commit moda:
- POSTAVITE AUTOMATSKO PREDAVANJE=0 Onemogući automatsko preuzimanje
- POSTAVITE AUTOMATSKO PREDAVANJE=1 Uključite auto-commit
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>
Korištenje transakcijskih instanci 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); ?>
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) podijelio je "Izolaciju povrata transakcije MySQL baze podataka/Otvoreni koncept/Obrada PHP izjava na razini", što vam je od pomoći.
Dobrodošli da podijelite vezu ovog članka:https://www.chenweiliang.com/cwl-494.html
Dobro došli na Telegram kanal Chen Weiliangovog bloga da dobijete najnovija ažuriranja!
📚 Ovaj vodič ima veliku vrijednost, 🌟 Ovo je rijetka prilika, nemojte je propustiti! ⏰⌛💨
Podijelite i lajkajte ako vam se sviđa!
Vaše dijeljenje i lajkovi naša su stalna motivacija!