Katalog artykułów
Baza danych MySQLIzolacja wycofywania transakcji/otwarta koncepcja/przetwarzanie na poziomie instrukcji php
MySQL Spraw
Transakcje MySQL służą głównie do przetwarzania danych o dużej ilości operacji i dużej złożoności.Na przykład w systemie zarządzania personelem, jeśli usuniesz osobę, musisz usunąć zarówno podstawowe informacje o osobie, jak i informacje związane z osobą, takie jak skrzynki pocztowe, artykuły itp. W ten sposób te wyciągi z obsługi bazy danych stanowią transakcję !
- Transakcje są obsługiwane w MySQL tylko w przypadku baz danych lub tabel korzystających z silnika bazy danych Innodb.
- Przetwarzanie transakcji może służyć do utrzymania integralności bazy danych, zapewniając, że partie instrukcji SQL zostaną wykonane w całości lub żadna z nich nie zostanie wykonana.
- Transakcje służą do zarządzania wstawianiem, aktualizacją, usuwaniem wyciągów
Ogólnie rzecz biorąc, transakcja musi spełniać 4 warunki (ACID): Atomowość (atomowość), Spójność (stabilność), Izolacja (izolacja), Trwałość (niezawodność)
- 1,Atomowość transakcji:Zestaw transakcji, które kończą się sukcesem lub wycofują.
- 2,stabilność:Istnieją nielegalne dane (ograniczenia związane z kluczami zagranicznymi itp.) i transakcja zostaje wycofana.
- 3,Izolacja:Transakcje przebiegają niezależnie.Jeśli wynik transakcji wpłynie na inne transakcje, inne transakcje zostaną wycofane.100% izolacja transakcji kosztem szybkości.
- 4,niezawodność:Po awarii oprogramowania i sprzętu sterownik tabeli danych InnoDB użyje pliku dziennika do jego rekonstrukcji i modyfikacji.Niezawodność i duża szybkość nie mogą mieć obu tych cech, opcja innodb_flush_log_at_trx_commit określa, kiedy zapisać transakcje w dzienniku.
Zgodnie z domyślnymi ustawieniami wiersza poleceń MySQL transakcje są zatwierdzane automatycznie, co oznacza, że operacja COMMIT zostanie wykonana natychmiast po wykonaniu instrukcji SQL.Dlatego, aby jawnie otworzyć transakcję, należy użyć polecenia BEGIN lub START TRANSACTION lub wykonać polecenie SET AUTOCOMMIT=0, aby wyłączyć użycie automatycznego zatwierdzania dla bieżącej sesji.
Oświadczenie o kontroli transakcji:
- ROZPOCZNIJ lub ROZPOCZNIJ TRANSAKCJĘ, jawnie rozpocznij transakcję;
- COMMIT; COMMIT WORK można również użyć, ale oba są równoważne. COMMIT zatwierdza transakcję i sprawia, że wszystkie modyfikacje dokonane w bazie danych są trwałe;
- ROLLBACK; możliwe jest użycie ROLLBACK WORK, ale oba są równoważne.Wycofanie kończy transakcję użytkownika i cofa wszystkie niezatwierdzone modyfikacje w toku;
- Identyfikator SAVEPOINT;SAVEPOINT umożliwia utworzenie punktu zapisu w transakcji, a transakcja może zawierać wiele punktów SAVEPOINT;
- Identyfikator RELEASE SAVEPOINT, usunięcie punktu zapisu transakcji, gdy nie ma określonego punktu zapisu, wykonanie instrukcji spowoduje zgłoszenie wyjątku;
- Identyfikator ROLLBACK TO, cofnij transakcję do punktu;
- SET TRANSACTION; służy do ustawiania poziomu izolacji transakcji. Poziomy izolacji transakcji zapewniane przez aparat pamięci masowej InnoDB to READ UNCOMMITTED, READ COMMITTED, REPEAABLE READ i SERIALIZABLE.
Istnieją dwie główne metody przetwarzania transakcji MYSQL:
1. Użyj BEGIN, ROLLBACK, COMMIT, aby osiągnąć;
- ZACZYNAĆ rozpocząć transakcję
- COFNIĘCIE wycofanie transakcji
- POPEŁNIĆ Potwierdzenie transakcji
2. Użyj SET bezpośrednio, aby zmienić tryb automatycznego zatwierdzania MySQL:
- USTAW AUTOCOMMIT=0 Wyłącz automatyczne zatwierdzanie
- USTAW AUTOCOMMIT=1 Włącz automatyczne zatwierdzanie
test transakcji
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>
Korzystanie z instancji transakcji w 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); ?>
Nadzieja Chen Weiliang Blog ( https://www.chenweiliang.com/ ) udostępniono "Izolacja wycofania transakcji bazy danych MySQL/Otwarta koncepcja/Przetwarzanie na poziomie wyciągów PHP", która jest dla Ciebie pomocna.
Zapraszamy do udostępnienia linku do tego artykułu:https://www.chenweiliang.com/cwl-494.html
Witamy na kanale Telegram bloga Chen Weiliang, aby uzyskać najnowsze aktualizacje!
📚 Ten przewodnik zawiera ogromną wartość, 🌟To rzadka okazja, nie przegap jej! ⏰⌛💨
Udostępnij i polub, jeśli chcesz!
Twoje udostępnianie i polubienia to nasza ciągła motywacja!