Direktori Artikel
pangkalan data MySQLPenyata php pemprosesan balik transaksi/konsep terbuka/peringkat
MySQL Urusan
Transaksi MySQL digunakan terutamanya untuk memproses data dengan jumlah operasi yang besar dan kerumitan yang tinggi.Contohnya, dalam sistem pengurusan kakitangan, jika anda memadamkan seseorang, anda perlu memadamkan kedua-dua maklumat asas orang itu dan maklumat yang berkaitan dengan orang itu, seperti peti mel, artikel, dll. Dengan cara ini, pernyataan operasi pangkalan data ini membentuk urus niaga!
- Transaksi disokong dalam MySQL hanya untuk pangkalan data atau jadual yang menggunakan enjin pangkalan data Innodb.
- Pemprosesan transaksi boleh digunakan untuk mengekalkan integriti pangkalan data, memastikan kumpulan pernyataan SQL sama ada semuanya dilaksanakan atau tiada satu pun daripadanya dilaksanakan.
- Transaksi digunakan untuk mengurus sisipan, kemas kini, memadam penyata
Secara umumnya, urus niaga mesti memenuhi 4 syarat (ACID): Atomicity (atomicity), Ketekalan (stability), Pengasingan (isolasi), Ketahanan (reliability)
- 1,Atomiti transaksi:Satu set transaksi yang sama ada berjaya atau menarik diri.
- 2,kestabilan:Terdapat data haram (kekangan kunci asing dan seumpamanya), dan transaksi ditarik balik.
- 3,Pengasingan:Urus niaga berjalan secara bebas.Jika hasil transaksi mempengaruhi transaksi lain, maka transaksi lain akan ditarik balik.100% pengasingan transaksi dengan mengorbankan kelajuan.
- 4,kebolehpercayaan:Selepas ranap perisian dan perkakasan, pemacu jadual data InnoDB akan menggunakan fail log untuk membina semula dan mengubah suainya.Kebolehpercayaan dan kelajuan tinggi tidak boleh mempunyai kedua-duanya, pilihan innodb_flush_log_at_trx_commit menentukan masa untuk menyimpan transaksi ke log.
Di bawah tetapan lalai baris arahan MySQL, transaksi dilakukan secara automatik, iaitu, operasi COMMIT akan dilaksanakan serta-merta selepas pernyataan SQL dilaksanakan.Oleh itu, untuk membuka transaksi secara eksplisit mesti menggunakan perintah BEGIN atau START TRANSACTION, atau laksanakan arahan SET AUTOCOMMIT=0, untuk melumpuhkan penggunaan komit automatik untuk sesi semasa.
Penyata kawalan urus niaga:
- MULAKAN atau MULAKAN TRANSAKSI; mulakan transaksi secara eksplisit;
- COMMIT; COMMIT WORK juga boleh digunakan, tetapi kedua-duanya adalah setara. COMMIT melakukan transaksi dan membuat semua pengubahsuaian yang dibuat pada pangkalan data kekal;
- ROLLBACK; adalah mungkin untuk menggunakan ROLLBACK WORK, tetapi kedua-duanya adalah bersamaan.Rollback menamatkan urus niaga pengguna dan membatalkan semua pengubahsuaian tanpa komitmen yang sedang dijalankan;
- pengecam SAVEPOINT; SAVEPOINT membenarkan untuk mencipta titik simpanan dalam transaksi, dan boleh terdapat berbilang SAVEPOINT dalam transaksi;
- LEPASKAN pengecam SAVEPOINT; padam titik simpan transaksi, apabila tiada titik simpan yang ditentukan, melaksanakan penyata akan membuang pengecualian;
- KEMBALI KEPADA pengecam; gulung semula transaksi ke titik;
- SET TRANSAKSI; digunakan untuk menetapkan tahap pengasingan transaksi. Enjin storan InnoDB menyediakan tahap pengasingan transaksi READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ dan SERIALIZED.
Terdapat dua kaedah utama pemprosesan transaksi MYSQL:
1. Gunakan BEGIN, ROLLBACK, COMMIT untuk mencapainya
- BEGIN mulakan transaksi
- KEMBALIKAN pengembalian transaksi
- KOMITMEN Pengesahan urus niaga
2. Gunakan SET terus untuk menukar mod autokomit MySQL:
- TETAPKAN AUTOKOMIT=0 Lumpuhkan autokomit
- TETAPKAN AUTOKOMIT=1 Hidupkan autokomit
ujian transaksi
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>
Menggunakan Contoh Transaksi dalam PHP
MySQL ORDER OLEH ujian:
<? 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 Harapan Chen Weiliang ( https://www.chenweiliang.com/ ) berkongsi "Pengasingan Balik Transaksi Pangkalan Data MySQL/Konsep Terbuka/Pemprosesan Tahap Penyata PHP", yang membantu anda.
Selamat datang untuk berkongsi pautan artikel ini:https://www.chenweiliang.com/cwl-494.html
Selamat datang ke saluran Telegram blog Chen Weiliang untuk mendapatkan kemas kini terkini!
📚 Panduan ini mengandungi nilai yang besar, 🌟Ini adalah peluang yang jarang berlaku, jangan lepaskan! ⏰⌛💨
Share dan like jika anda suka!
Perkongsian dan suka anda adalah motivasi berterusan kami!