Anyè Atik
baz done MySQLTranzaksyon rollback izòlman/louvri konsèp/nivo pwosesis deklarasyon php
Miskl Afè
Tranzaksyon MySQL yo sitou itilize pou trete done ak yon gwo kantite operasyon ak gwo konpleksite.Pou egzanp, nan sistèm nan jesyon pèsonèl, si ou efase yon moun, ou bezwen efase tou de enfòmasyon debaz yo nan moun nan ak enfòmasyon ki gen rapò ak moun nan, tankou bwat lèt, atik, elatriye Nan fason sa a, deklarasyon sa yo operasyon baz done. konstitye yon tranzaksyon!
- Tranzaksyon yo sipòte nan MySQL sèlman pou baz done oswa tab ki itilize motè a baz done Innodb.
- Pwosesis tranzaksyon yo ka itilize pou kenbe entegrite baz done a, asire ke pakèt deklarasyon SQL yo swa tout egzekite oswa okenn nan yo pa egzekite.
- Tranzaksyon yo itilize pou jere insert, mete ajou, efase deklarasyon yo
An jeneral, yon tranzaksyon dwe satisfè 4 kondisyon (ACID): Atomisite (atomisite), Konsistans (estabilite), Izolasyon (izolasyon), Durabilité (fyab)
- 1,Atomisite tranzaksyon yo:Yon seri tranzaksyon ki swa reyisi oswa retire.
- 2,estabilite:Gen done ilegal (kontrent kle etranje ak renmen an), epi yo retire tranzaksyon an.
- 3,An karantèn:Tranzaksyon yo kouri poukont yo.Si rezilta yon tranzaksyon afekte lòt tranzaksyon yo, yo pral retire lòt tranzaksyon yo.100% izòlman nan tranzaksyon nan depans lan nan vitès.
- 4,fyab:Apre aksidan lojisyèl ak pyès ki nan konpitè, chofè tab done InnoDB pral sèvi ak dosye log la pou rekonstwi ak modifye li.Fyab ak gwo vitès pa ka genyen tou de, opsyon innodb_flush_log_at_trx_commit detèmine lè pou konsève pou tranzaksyon yo nan boutèy la.
Anba paramèt yo default nan liy kòmand MySQL, tranzaksyon yo otomatikman komèt, se sa ki, operasyon an COMMIT yo pral egzekite imedyatman apre yo fin egzekite deklarasyon SQL la.Se poutèt sa, klèman louvri yon tranzaksyon yo dwe itilize kòmandman an BEGIN oswa START TRANSACTION, oswa egzekite lòd la SET AUTOCOMMIT=0, pou enfim itilizasyon otomatik komite pou sesyon aktyèl la.
Deklarasyon kontwòl tranzaksyon:
- KÒMANSE oswa KÒMANSE TRANZAKSYON, klèman kòmanse yon tranzaksyon;
- COMMIT; COMMIT WORK ka itilize tou, men de yo ekivalan. COMMIT komèt tranzaksyon an epi fè tout modifikasyon ki fèt nan baz done a pèmanan;
- ROLLBACK; li posib pou itilize ROLLBACK WORK, men de yo ekivalan.Rollback mete fen nan tranzaksyon itilizatè a epi defèt tout modifikasyon ki pa komèt k ap fèt;
- SAVEPOINT idantifyan; SAVEPOINT pèmèt yo kreye yon pwen sove nan yon tranzaksyon, epi kapab genyen plizyè SAVEPOINT nan yon tranzaksyon;
- RELEASE SAVEPOINT idantifyan; efase yon pwen sove nan yon tranzaksyon, lè pa gen okenn pwen sove espesifye, egzekite deklarasyon an pral voye yon eksepsyon;
- ROLLBACK TO identifiant; woule tranzaksyon an tounen nan pwen an;
- SET TRANZAKSYON; itilize pou mete nivo izolasyon tranzaksyon an. Motè depo InnoDB la bay nivo izolasyon tranzaksyon READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, ak SERIALIZABLE.
Gen de metòd prensipal nan pwosesis tranzaksyon MYSQL:
1. Sèvi ak BEGIN, ROLLBACK, COMMIT pou reyalize
- KÒMANSE kòmanse yon tranzaksyon
- ROULE TOUNEN tranzaksyon rollback
- KOMÈT Konfimasyon tranzaksyon
2. Sèvi ak SET dirèkteman pou chanje mòd oto-komèt MySQL la:
- SETAUTOCOMMIT=0 Enfim oto-komèt
- SETAUTOCOMMIT=1 Limen oto-komèt
tès tranzaksyon
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>
Sèvi ak Enstans Tranzaksyon nan PHP
MySQL ORDER BY tès:
<? 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/ ) pataje "MySQL Database Tranzaksyon Rollback Izòlman/Konsèp Louvri/Nivo Pwosesis Deklarasyon PHP", ki itil pou ou.
Byenvini pataje lyen atik sa a:https://www.chenweiliang.com/cwl-494.html
Byenveni nan chanèl Telegram blog Chen Weiliang a pou jwenn dènye mizajou yo!
📚 Gid sa a gen anpil valè, 🌟Sa a se yon opòtinite ki ra, pa rate li! ⏰⌛💨
Pataje epi like siw renmen!
Pataje w ak renmen ou se motivasyon kontinyèl nou!