Diréktori Tulisan
database MySQLTransaksi rollback isolasi / konsep kabuka / tingkat processing php pernyataan
MySQL Urusan
transaksi MySQL utamana dipaké pikeun ngolah data kalawan jumlah badag operasi sarta pajeulitna tinggi.Salaku conto, dina sistem manajemen tanaga, upami anjeun ngahapus hiji jalma, anjeun kedah ngahapus inpormasi dasar jalma sareng inpormasi anu aya hubunganana sareng jalma éta, sapertos kotak surat, artikel, jsb. Ku cara kieu, pernyataan operasi database ieu janten transaksi!
- Transaksi dirojong dina MySQL ngan ukur pikeun pangkalan data atanapi tabel anu nganggo mesin database Innodb.
- Pamrosésan transaksi tiasa dianggo pikeun ngajaga integritas pangkalan data, mastikeun yén bets pernyataan SQL boh sadayana dieksekusi atanapi henteu aya anu dieksekusi.
- Transaksi dipaké pikeun ngatur insert, update, mupus pernyataan
Sacara umum, transaksi kedah nyumponan 4 kaayaan (ACID): Atomicity (atomicity), Konsistensi (stability), Isolasi (isolasi), Durability (reliabilitas)
- 1,Atomitas transaksi:Sakumpulan transaksi anu suksés atanapi mundur.
- 2,stabilitas:Aya data ilegal (konstrain konci asing jeung kawas), sarta urus ieu ditarik.
- 3,Isolasi:Transaksi ngajalankeun mandiri.Upami hasil tina transaksi mangaruhan transaksi anu sanés, maka transaksi anu sanés bakal ditarik.100% isolasi transaksi di expense of speed.
- 4,reliabiliti:Saatos kacilakaan parangkat lunak sareng hardware, supir tabel data InnoDB bakal nganggo file log pikeun ngarekonstruksikeun sareng ngarobih.Reliabiliti jeung speed tinggi teu bisa boga duanana, pilihan innodb_flush_log_at_trx_commit nangtukeun iraha bade nyimpen transaksi ka log.
Dina setélan standar tina garis paréntah MySQL, transaksi otomatis komitmen, nyaéta, operasi COMMIT bakal dieksekusi langsung saatos pernyataan SQL dieksekusi.Ku alatan éta, pikeun muka transaksi sacara eksplisit kedah nganggo paréntah BEGIN atanapi START TRANSACTION, atanapi ngalaksanakeun paréntah SET AUTOCOMMIT=0, pikeun nganonaktipkeun pamakean commit otomatis pikeun sési ayeuna.
Pernyataan kontrol transaksi:
- MULAI atanapi MULAI TRANSAKSI; sacara eksplisit ngamimitian transaksi;
- COMMIT; COMMIT WORK ogé tiasa dianggo, tapi duana sami. COMMIT commits urus jeung ngajadikeun sakabeh modifikasi dijieun kana database permanén;
- ROLLBACK; anjeun tiasa nganggo ROLLBACK WORK, tapi duanana sami.Rollback mungkas transaksi pamaké sarta ngabatalkeun sagala modifikasi uncommitted lumangsung;
- SAVEPOINT identifier; SAVEPOINT ngamungkinkeun pikeun nyieun hiji savepoint dina transaksi, sarta bisa aya sababaraha SAVEPOINTs dina transaksi;
- RELEASE SAVEPOINT identifier; mupus hiji savepoint tina hiji urus, lamun teu aya savepoint husus, executing pernyataan bakal buang pengecualian;
- ROLLBACK TO identifier; gulung deui transaksi ka titik;
- SET TRANSAKSI; dipaké pikeun nyetél tingkat isolasi transaksi. Tingkat isolasi transaksi anu disayogikeun ku mesin panyimpen InnoDB nyaéta READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, sareng SERIALIZABLE.
Aya dua metodeu utama ngolah transaksi MYSQL:
1. Anggo BEGIN, ROLLBACK, COMMIT pikeun ngahontal
- ngamimitian ngamimitian urus
- ROLLACK rollback urus
- KOMIT Konfirmasi transaksi
2. Anggo SET langsung pikeun ngarobih modeu komitmen otomatis MySQL:
- SETAUTOCOMMIT=0 Nonaktipkeun auto-commit
- SETAUTOCOMMIT=1 Hurungkeun komitmen otomatis
tés urus
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>
Ngagunakeun Instansi Transaksi dina 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); ?>
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) dibagikeun "MySQL Database Transaksi Rollback Isolasi / Open Concept / Level Processing tina Pernyataan PHP", nu mantuan pikeun anjeun.
Wilujeng ngabagikeun tautan artikel ieu:https://www.chenweiliang.com/cwl-494.html
Wilujeng sumping di saluran Telegram blog Chen Weiliang pikeun kéngingkeun apdet panganyarna!
📚 Pituduh ieu ngandung nilai anu ageung, 🌟Ieu mangrupikeun kasempetan anu jarang, tong kantun! ⏰⌛💨
Bagikeun sareng suka upami anjeun resep!
Bagikeun sareng resep anjeun mangrupikeun motivasi kontinyu kami!