Artikulo Direktoryo
Mga pahayag ng PHP para sa rollback ng transaksyon sa database ng MySQL na paghihiwalay/pagpapagana ng mga konsepto/paghawak ng antas
MySQL Kaugnayan
Ang mga transaksyon sa MySQL ay pangunahing ginagamit upang iproseso ang data na may malaking halaga ng mga operasyon at mataas na kumplikado.Halimbawa, sa sistema ng pamamahala ng tauhan, kung tatanggalin mo ang isang tao, kailangan mong tanggalin pareho ang pangunahing impormasyon ng tao at ang impormasyong nauugnay sa tao, tulad ng mga mailbox, artikulo, atbp. Sa ganitong paraan, ang mga pahayag ng pagpapatakbo ng database na ito bumubuo ng isang transaksyon!
- Ang mga transaksyon ay sinusuportahan lamang sa MySQL para sa mga database o talahanayan na gumagamit ng Innodb database engine.
- Maaaring gamitin ang pagpoproseso ng transaksyon upang mapanatili ang integridad ng database, na tinitiyak na ang mga batch ng mga SQL statement ay maaaring lahat ay naisakatuparan o wala sa mga ito ang naisakatuparan.
- Ginagamit ang mga transaksyon upang pamahalaan ang pagpasok, pag-update, pagtanggal ng mga pahayag
Sa pangkalahatan, dapat matugunan ng mga transaksyon ang 4 na kundisyon (ACID): Atomicity (atomicity), Consistency (stability), Isolation (isolation), Durability (reliability)
- 1,Atomicity ng mga transaksyon:Isang hanay ng mga transaksyon na maaaring magtagumpay o mag-withdraw.
- 2,katatagan:Mayroong ilegal na data (mga dayuhang pangunahing hadlang at katulad nito), at ang transaksyon ay na-withdraw.
- 3,Isolation:Ang mga transaksyon ay tumatakbo nang nakapag-iisa.Kung ang resulta ng isang transaksyon ay nakakaapekto sa iba pang mga transaksyon, ang iba pang mga transaksyon ay aalisin.100% paghihiwalay ng mga transaksyon sa gastos ng bilis.
- 4,pagiging maaasahan:Pagkatapos ng pag-crash ng software at hardware, gagamitin ng driver ng talahanayan ng data ng InnoDB ang log file upang muling buuin at baguhin ito.Ang pagiging maaasahan at mataas na bilis ay hindi maaaring magkaroon ng pareho, tinutukoy ng pagpipiliang innodb_flush_log_at_trx_commit kung kailan ise-save ang mga transaksyon sa log.
Sa ilalim ng mga default na setting ng MySQL command line, ang mga transaksyon ay awtomatikong gagawin, iyon ay, ang COMMIT na operasyon ay isasagawa kaagad pagkatapos maisagawa ang SQL statement.Samakatuwid, para tahasang buksan ang isang transaksyon ay dapat gamitin ang command na BEGIN o START TRANSACTION, o isagawa ang command na SET AUTOCOMMIT=0, upang hindi paganahin ang paggamit ng automatic commit para sa kasalukuyang session.
Pahayag ng kontrol sa transaksyon:
- MAGSIMULA o MAGSIMULA NG TRANSACTION; tahasang magsimula ng transaksyon;
- COMMIT; COMMIT WORK ay maaari ding gamitin, ngunit ang dalawa ay katumbas. Ginagawa ng COMMIT ang transaksyon at ginagawang permanente ang lahat ng pagbabagong ginawa sa database;
- ROLLBACK; posibleng gumamit ng ROLLBACK WORK, ngunit ang dalawa ay katumbas.Tinatapos ng pag-rollback ang transaksyon ng user at inaalis ang lahat ng kasalukuyang pagbabagong hindi ipinangako;
- SAVEPOINT identifier; nagbibigay-daan ang SAVEPOINT na lumikha ng savepoint sa isang transaksyon, at maaaring magkaroon ng maraming SAVEPOINT sa isang transaksyon;
- RELEASE SAVEPOINT identifier; tanggalin ang isang savepoint ng isang transaksyon, kapag walang tinukoy na savepoint, ang pagpapatupad ng pahayag ay magtapon ng exception;
- ROLLBACK SA identifier; ibalik ang transaksyon sa punto;
- SET TRANSACTION; ginagamit upang itakda ang antas ng paghihiwalay ng transaksyon. Ang mga antas ng paghihiwalay ng transaksyon na ibinigay ng InnoDB storage engine ay READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, at SERIALIZABLE.
Mayroong dalawang pangunahing paraan ng pagproseso ng transaksyon sa MYSQL:
1. Gamitin ang BEGIN, ROLLBACK, COMMIT para makamit
- BEGIN magsimula ng transaksyon
- BUMALIK rollback ng transaksyon
- Magsanay Pagkumpirma ng transaksyon
2. Direktang gamitin ang SET para baguhin ang auto-commit mode ng MySQL:
- Itakda ang AUTOCOMMIT=0 Huwag paganahin ang auto-commit
- Itakda ang AUTOCOMMIT=1 I-on ang auto-commit
pagsubok sa transaksyon
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>
Paggamit ng Mga Instance ng Transaksyon sa PHP
MySQL ORDER NG pagsubok:
<?
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);
?>Sana ay makatulong sa iyo ang artikulong "MySQL Database Transaction Rollback Isolation/Enabling Concepts/Level Handling PHP Statements" na ibinahagi sa blog ni Chen Weiliang ( https://www.chenweiliang.com/ ).
Huwag mag-atubiling ibahagi ang link ng artikulong ito: https://www.chenweiliang.com/cwl-494.html
