Direktori Artikel
database MySQLIsolasi rollback transaksi/konsep terbuka/pernyataan php pemrosesan level
MySQL urusan
Transaksi MySQL terutama digunakan untuk memproses data dengan jumlah operasi yang besar dan kompleksitas yang tinggi.Misalnya, dalam sistem manajemen personalia, jika Anda menghapus seseorang, Anda perlu menghapus informasi dasar orang tersebut dan informasi yang terkait dengan orang tersebut, seperti kotak surat, artikel, dll. Dengan cara ini, pernyataan operasi basis data ini merupakan transaksi!
- Transaksi didukung di MySQL hanya untuk database atau tabel yang menggunakan mesin database Innodb.
- Pemrosesan transaksi dapat digunakan untuk menjaga integritas database, memastikan bahwa kumpulan pernyataan SQL dijalankan semua atau tidak ada yang dieksekusi.
- Transaksi digunakan untuk mengelola penyisipan, pembaruan, penghapusan pernyataan
Secara umum, transaksi harus memenuhi 4 syarat (ACID): Atomicity (atomicity), Consistency (stabilitas), Isolation (isolasi), Durability (reliability)
- 1,Atomisitas transaksi:Serangkaian transaksi, berhasil atau ditarik.
- 2,stabilitas:Ada data ilegal (batasan kunci asing dan sejenisnya), dan transaksi ditarik.
- 3,Isolasi:Transaksi berjalan secara independen.Jika hasil suatu transaksi mempengaruhi transaksi lain, maka transaksi lain akan ditarik.100% isolasi transaksi, yang membutuhkan kecepatan yang dikorbankan.
- 4,keandalan:Setelah perangkat lunak dan perangkat keras mogok, driver tabel data InnoDB akan menggunakan file log untuk merekonstruksi dan memodifikasinya.Keandalan dan kecepatan tinggi tidak dapat memiliki keduanya, opsi innodb_flush_log_at_trx_commit menentukan kapan harus menyimpan transaksi ke log.
Di bawah pengaturan default baris perintah MySQL, transaksi secara otomatis dilakukan, yaitu, operasi COMMIT akan dieksekusi segera setelah pernyataan SQL dijalankan.Oleh karena itu, untuk membuka transaksi secara eksplisit harus menggunakan perintah BEGIN atau START TRANSACTION, atau jalankan perintah SET AUTOCOMMIT=0, untuk menonaktifkan penggunaan komit otomatis untuk sesi saat ini.
Pernyataan kontrol transaksi:
- MULAI atau MULAI TRANSAKSI; secara eksplisit memulai transaksi;
- COMMIT; COMMIT WORK juga dapat digunakan, tetapi keduanya setara. COMMIT melakukan transaksi dan membuat semua modifikasi yang dibuat ke database permanen;
- ROLLBACK; dimungkinkan untuk menggunakan ROLLBACK WORK, tetapi keduanya setara.Rollback mengakhiri transaksi pengguna dan membatalkan modifikasi tanpa komitmen yang sedang berlangsung;
- Pengidentifikasi SAVEPOINT; SAVEPOINT memungkinkan untuk membuat savepoint dalam suatu transaksi, dan mungkin ada beberapa SAVEPOINT dalam suatu transaksi;
- RELEASE SAVEPOINT identifier; hapus savepoint dari suatu transaksi, ketika tidak ada savepoint yang ditentukan, mengeksekusi pernyataan akan mengeluarkan pengecualian;
- ROLLBACK TO identifier; putar kembali transaksi ke intinya;
- SET TRANSACTION; digunakan untuk mengatur tingkat isolasi transaksi. Mesin penyimpanan InnoDB menyediakan tingkat isolasi transaksi READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, dan SERIALIZABLE.
Ada dua metode utama pemrosesan transaksi MYSQL:
1. Gunakan BEGIN, ROLLBACK, COMMIT untuk mencapai
- MULAI memulai transaksi
- KEMBALI pengembalian transaksi
- KOMIT Konfirmasi transaksi
2. Gunakan SET secara langsung untuk mengubah mode komit otomatis MySQL:
- SETEL AUTOCOMMIT=0 Nonaktifkan komit otomatis
- SETEL AUTOCOMMIT=1 Aktifkan komit otomatis
tes 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 Instance Transaksi di PHP
Tes MySQL ORDER BY:
<? 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); ?>
Harapan Chen Weiliang Blog ( https://www.chenweiliang.com/ ) membagikan "Isolasi Rollback Transaksi Database MySQL/Konsep Terbuka/Pemrosesan Level Pernyataan PHP", yang berguna bagi Anda.
Selamat datang untuk membagikan tautan artikel ini:https://www.chenweiliang.com/cwl-494.html
Selamat datang di saluran Telegram blog Chen Weiliang untuk mendapatkan pembaruan terkini!
📚 Panduan ini mengandung nilai yang sangat besar, 🌟Ini adalah kesempatan langka, jangan sampai terlewatkan! ⏰⌛💨
Bagikan dan sukai jika Anda suka!
Berbagi dan suka Anda adalah motivasi berkelanjutan kami!