MySQLストアドプロシージャ内でROLLBACKトランザクションを実行するにはどうすればよいですか?
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)
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)
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)
上記の結果セットから、INSERTの最初のクエリがエラー(NULL値を挿入しようとしている)をスローしたため、UPDATEステートメントによって行われた変更がROLLBACKEDされていることがわかります。
-
MySQLストアドプロシージャ内でSTARTトランザクションを実行するにはどうすればよいですか?
知っているように、STARTトランザクションはトランザクションを開始し、自動コミットモードをオフに設定します。次の例では、次のデータを持つテーブルemployee.tblに新しいレコードを挿入するSTARTトランザクションを使用してストアドプロシージャを作成しました- mysql> Select * from employee.tbl; +----+---------+ | Id | Name | +----+---------+ | 1 | Mohan | | 2 | Gaurav | | 3 |
-
MySQLストアドプロシージャは、その中の別のMySQLストアドプロシージャをどのように呼び出すことができますか?
MySQLストアドプロシージャがその中の別のMySQLストアドプロシージャを呼び出す可能性は十分にあります。これを示すために、ストアドプロシージャが別のストアドプロシージャを呼び出してlast_insert_idを見つける例を取り上げています。 例 mysql> Create table employee.tbl(Id INT NOT NULL AUTO_INCREMENT, Name Varchar(30) NOT NULL, PRIMARY KEY(id))// Query OK, 0 rows affected (3.87 sec) mysql> Create Proced