Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah kita boleh melakukan transaksi ROLLBACK dalam prosedur tersimpan MySQL?

Bagaimanakah kita boleh melakukan transaksi ROLLBACK dalam prosedur tersimpan MySQL?

WBOY
WBOYke hadapan
2023-08-23 20:17:021315semak imbas

我们如何在 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)

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)

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)

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam