Bagaimanakah kita boleh melakukan transaksi ROLLBACK dalam prosedur tersimpan MySQL?

WBOY
Lepaskan: 2023-08-23 20:17:02
ke hadapan
1376 orang telah melayarinya

我们如何在 MySQL 存储过程中执行 ROLLBACK 事务?

Kami tahu bahawa ROLLBACK akan mengembalikan sebarang perubahan yang dibuat pada pangkalan data selepas transaksi dimulakan. Untuk melaksanakan ROLLBACK dalam prosedur tersimpan MySQL, kita mesti mengisytiharkan pengendali EXIT. Kita boleh menggunakan pengendali untuk amaran sqlException atau SQL. Ia boleh difahami dengan bantuan contoh di mana prosedur tersimpan ROLLBACK dicipta untuk jadual dengan butiran berikut -

mysql> SHOW CREATE table gg\G
*************************** 1. row ***************************
       Table: gg
Create Table: CREATE TABLE `gg` (
   `Id` int(11) NOT NULL AUTO_INCREMENT,
   `Name` varchar(30) NOT NULL,
   PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
Salin selepas log masuk

Kita dapat melihat bahawa lajur "nama" tidak boleh mempunyai nilai NULL dan jadual mempunyai data berikut -

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
|  1 | Mohan   |
|  2 | Gaurav  |
|  3 | Sohan   |
|  4 | Saurabh |
|  5 | Yash    |
|  6 | Rahul   |
+----+---------+
6 rows in set (0.00 sec)
Salin selepas log masuk

Contoh

mysql> Delimiter //
mysql> Create Procedure st_transaction_Rollback()
    -> BEGIN
    -> DECLARE exit handler for sqlexception
    -> BEGIN
    -> ROLLBACK;
    -> END;
    -> DECLARE exit handler for sqlwarning
    -> BEGIN
    -> ROLLBACK;
    -> END;
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl(name) values();
    -> UPDATE employee.tbl set name = 'YashPal' where id = 5;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.02 sec)

mysql> Delimiter ;
mysql> CALL st_transaction_Rollback ()
Query OK, 0 rows affected (0.00 sec)

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
|  1 | Mohan   |
|  2 | Gaurav  |
|  3 | Sohan   |
|  4 | Saurabh |
|  5 | Yash    |
|  6 | Rahul   |
+----+---------+
6 rows in set (0.00 sec)
Salin selepas log masuk

Daripada set hasil di atas kita dapat melihat bahawa perubahan yang dibuat oleh kenyataan KEMASKINI telah DIGOLONGKAN kerana pertanyaan pertama INSERT melemparkan ralat (cuba memasukkan nilai NULL).

Atas ialah kandungan terperinci Bagaimanakah kita boleh melakukan transaksi ROLLBACK dalam prosedur tersimpan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan