Artikulu direktorioa
MySQL datu-baseaTransakzio atzera bota isolamendua/kontzeptu irekia/maila prozesatzeko php adierazpena
MySQL Gaiak
MySQL transakzioak eragiketa ugari eta konplexutasun handiko datuak prozesatzeko erabiltzen dira batez ere.Esaterako, langileak kudeatzeko sisteman, pertsona bat ezabatzen baduzu, pertsonaren oinarrizko informazioa eta pertsonari lotutako informazioa ezabatu behar dituzu, hala nola postontzi, artikuluak, etab. Modu honetan, datu-basearen funtzionamendu adierazpen hauek transakzio bat osatu!
- Transakzioak MySQL-n onartzen dira Innodb datu-base-motorra erabiltzen duten datu-baseetarako edo tauletarako soilik.
- Transakzioen prozesamendua datu-basearen osotasuna mantentzeko erabil daiteke, SQL instrukzio sorta guztiak exekutatzen direla edo haietako bat ere ez dela exekutatzen ziurtatuz.
- Transakzioak adierazpenak txertatzeko, eguneratzeko eta ezabatzeko erabiltzen dira
Oro har, transakzio batek 4 baldintza bete behar ditu (AZIDO): Atomikotasuna (atomikotasuna), koherentzia (egonkortasuna), Isolamendua (isolamendua), Iraunkortasuna (fidagarritasuna)
- 1,Transakzioen atomotasuna:Arrakasta egiten edo atzera egiten duten transakzio multzoa.
- 2,egonkortasuna:Legez kanpoko datuak daude (atzerriko gakoen mugak eta antzekoak), eta transakzioa erretiratu egiten da.
- 3,Isolatze:Transakzioak modu independentean egiten dira.Transakzio baten emaitzak beste transakzio batzuei eragiten badie, beste transakzio batzuk kenduko dira.Transakzioen %100 isolatzea abiaduraren kontura.
- 4,fidagarritasuna:Softwarearen eta hardwarearen hutsegitearen ondoren, InnoDB datu-taularen kontrolatzaileak erregistro-fitxategia erabiliko du hura berreraikitzeko eta aldatzeko.Fidagarritasunak eta abiadura handiak ezin dituzte biak izan, innodb_flush_log_at_trx_commit aukerak transakzioak erregistroan gorde behar diren zehazten du.
MySQL komando-lerroaren ezarpen lehenetsien arabera, transakzioak automatikoki konprometitzen dira, hau da, COMMIT eragiketa SQL instrukzioa exekutatu eta berehala exekutatu egingo da.Hori dela eta, transakzio bat esplizituki irekitzeko BEGIN edo START TRANSACTION komandoa erabili behar da, edo SET AUTOCOMMIT=0 komandoa exekutatu, uneko saiorako konpromezu automatikoaren erabilera desgaitzeko.
Transakzio-kontrolaren adierazpena:
- HASI edo HASI TRANSAKZIOA; berariaz hasi transakzio bat;
- COMMIT; COMMIT WORK ere erabil daiteke, baina biak baliokideak dira. COMMIT-ek transakzioa konprometitzen du eta datu-basean egindako aldaketa guztiak iraunkor bihurtzen ditu;
- ROLLBACK; ROLLBACK WORK erabil daiteke, baina biak baliokideak dira.Rollback-ek erabiltzailearen transakzioa amaitzen du eta abian dauden konprometitu gabeko aldaketa guztiak desegiten ditu;
- SAVEPOINT identifikatzailea; SAVEPOINT-ek transakzio batean gordetzeko puntu bat sortzeko aukera ematen du, eta transakzio batean SAVEPOINT anitz egon daitezke;
- ASKATU SAVEPOINT identifikatzailea; transakzio baten gordetze-puntua ezabatu, zehaztutako gordetze-punturik ez dagoenean, adierazpena exekutatzeak salbuespen bat botako du;
- ROLLBACK TO identifikatzailea; atzera egin transakzioa puntura;
- EZARRI TRANSAKZIOA; transakzioaren isolamendu-maila ezartzeko erabiltzen da. InnoDB biltegiratze-motorrak transakzioen isolamendu mailak eskaintzen ditu IRAKURRI KONPROMISU GABEA, IRAKURRI KONPROMISOA, IRAKURKETA ERREPETIKATUA eta SERIALIZABILA.
MYSQL transakzio prozesatzeko bi metodo nagusi daude:
1. Erabili BEGIN, ROLLBACK, COMMIT lortzeko
- BEGIN transakzio bat hasi
- ATZERA transakzio itzulera
- KONPROMISO Transakzioaren berrespena
2. Erabili SET zuzenean MySQL-ren auto-konpromiso modua aldatzeko:
- EZARRI AUTOCOMMIT=0 Desgaitu autokonpromisoa
- EZARRI AUTOCOMMIT=1 Aktibatu auto-konpromisoa
transakzio proba
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>
Transakzio-instantziak PHPn erabiltzea
MySQL ORDENATU proba:
<?
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 bloga ( https://www.chenweiliang.com/ ) partekatu du "MySQL datu-basearen transakzioen itzulera isolamendua/kontzeptu irekia/php adierazpenen maila prozesatzea", eta hori lagungarria zaizu.
Ongi etorri artikulu honen esteka partekatzera:https://www.chenweiliang.com/cwl-494.html
Trikimailu ezkutu gehiago desblokeatzeko🔑, ongi etorri gure Telegram kanalera!
Partekatu eta gustatu gustatzen bazaizu! Zure partekatzeak eta gustukoak dira gure etengabeko motibazioa!