Cyfeiriadur Erthygl
Cronfa ddata MySQLArwahanrwydd dychwelyd trafodion / cysyniad agored / datganiad php prosesu lefel
MySQL Materion
Defnyddir trafodion MySQL yn bennaf i brosesu data gyda llawer iawn o weithrediadau a chymhlethdod uchel.Er enghraifft, yn y system rheoli personél, os ydych chi'n dileu person, mae angen i chi ddileu gwybodaeth sylfaenol y person a'r wybodaeth sy'n ymwneud â'r person, megis blychau post, erthyglau, ac ati. Yn y modd hwn, mae'r datganiadau gweithrediad cronfa ddata hyn gyfystyr â thrafodiad !
- Cefnogir trafodion yn MySQL yn unig ar gyfer cronfeydd data neu dablau sy'n defnyddio peiriant cronfa ddata Innodb.
- Gellir defnyddio prosesu trafodion i gynnal cywirdeb y gronfa ddata, gan sicrhau bod sypiau o ddatganiadau SQL naill ai'n cael eu gweithredu neu nad oes yr un ohonynt yn cael eu gweithredu.
- Defnyddir trafodion i reoli mewnosod, diweddaru, dileu datganiadau
A siarad yn gyffredinol, rhaid i drafodiad fodloni 4 amod (ACID): Atomity (atomicity), Cysondeb (sefydlogrwydd), Arwahanrwydd (ynysu), Gwydnwch (dibynadwyedd)
- 1,Atomity trafodion:Set o drafodion, naill ai'n llwyddiannus neu wedi'u tynnu'n ôl.
- 2,sefydlogrwydd:Mae data anghyfreithlon (cyfyngiadau allweddol tramor ac ati), ac mae'r trafodiad yn cael ei dynnu'n ôl.
- 3,Ynysu:Mae trafodion yn rhedeg yn annibynnol.Os yw canlyniad trafodiad yn effeithio ar drafodion eraill, yna bydd trafodion eraill yn cael eu tynnu'n ôl.Ynysu trafodion 100% ar draul cyflymder.
- 4,dibynadwyedd:Ar ôl y ddamwain meddalwedd a chaledwedd, bydd gyrrwr tabl data InnoDB yn defnyddio'r ffeil log i'w hail-greu a'i haddasu.Ni all dibynadwyedd a chyflymder uchel gael y ddau, mae'r opsiwn innodb_flush_log_at_trx_commit yn pennu pryd i arbed trafodion i'r log.
O dan osodiadau rhagosodedig llinell orchymyn MySQL, mae trafodion yn cael eu hymrwymo'n awtomatig, hynny yw, bydd y gweithrediad COMMIT yn cael ei weithredu yn syth ar ôl gweithredu'r datganiad SQL.Felly, i agor trafodiad yn benodol rhaid defnyddio'r gorchymyn BEGIN neu START TRANSACTION, neu weithredu'r gorchymyn SET AUTOCOMMIT=0, i analluogi defnyddio ymrwymiad awtomatig ar gyfer y sesiwn gyfredol.
Datganiad rheoli trafodion:
- DECHRAU neu DECHRAU TRAFODAETH; cychwyn trafodiad yn benodol;
- YMRWYMIAD; gellir defnyddio YMRWYMIAD GWAITH hefyd, ond mae'r ddau yn gyfwerth. Mae COMMIT yn ymrwymo'r trafodiad ac yn gwneud yr holl addasiadau a wneir i'r gronfa ddata yn barhaol;
- CYNNAL; mae'n bosibl defnyddio GWAITH ROL YN ÔL, ond mae'r ddau yn gyfwerth.Mae Dychweliad yn dod â thrafodiad y defnyddiwr i ben ac yn dadwneud yr holl addasiadau heb eu hymrwymo ar y gweill;
- Dynodwr SAVEPOINT; Mae SAVEPOINT yn caniatáu creu man arbed mewn trafodiad, a gall fod SAVEPOINTs lluosog mewn trafodiad;
- RHYDDHAU dynodwr SAVEPOINT; dileu arbedbwynt trafodiad, pan nad oes arbedbwynt penodedig, bydd gweithredu'r datganiad yn taflu eithriad;
- RHOI ÔL I'r dynodwr; rholio'r trafodiad yn ôl i'r pwynt;
- GOSOD TRAFODION; a ddefnyddir i osod lefel ynysu'r trafodiad. Mae peiriant storio InnoDB yn darparu lefelau ynysu trafodion o READ UNCOMMITTED, REA COMMITTED, REREATABLE READING, and SERIALIZABLE.
Mae dau brif ddull o brosesu trafodion MYSQL:
1. Defnyddiwch BEGIN, ROLLback, COMMIT i gyflawni
- BEGIN dechrau trafodiad
- ROLIO YN OL Dychweliad trafodion
- PWYLLGOR Cadarnhad trafodiad
2. Defnyddiwch SET yn uniongyrchol i newid modd awto-ymrwymo MySQL:
- GOSOD AUTOCOMMIT=0 Analluogi awto-ymrwymo
- GOSOD AUTOCOMMIT=1 Trowch awto-ymrwymo ymlaen
prawf trafodiad
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>
Defnyddio Achosion Trafodion yn PHP
GORCHYMYN MySQL GAN brawf:
<?
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 Chen Weiliang Gobeithio ( https://www.chenweiliang.com/ ) wedi'i rannu "Ynysu Trafodion Dychweliad Cronfa Ddata MySQL / Cysyniad Agored / Prosesu Datganiadau PHP ar Lefel", sy'n ddefnyddiol i chi.
Croeso i chi rannu dolen yr erthygl hon:https://www.chenweiliang.com/cwl-494.html
I ddatgloi mwy o driciau cudd🔑, croeso i ymuno â'n sianel Telegram!
Rhannwch a hoffwch os ydych chi'n ei hoffi! Eich cyfrannau a'ch hoff bethau yw ein cymhelliant parhaus!