程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql存儲過程事務回滾

mysql存儲過程事務回滾

編輯:MySQL綜合教程

mysql存儲過程事務回滾


SQL過程代碼:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `test_procedure`()
BEGIN
	DECLARE errno int;
	declare continue HANDLER for sqlexception
begin 
	rollback;
	set errno=1;
end;
	start transaction;
	set errno=0;
	insert into test(name) values ('kaka');
	insert into test(id, name) values(1,'papa');
	commit;
	select errno;
END

過程說明:

1、首先表中已經存在一條記錄(1,'baby');

2、調用測試存儲過程;

3、該過程首先聲明error變量,和一個SQL異常處理handler,該handler觸發時會回滾事務,並將error置為1;

事務開始,將error置為0,插入一條數據name為‘kaka’,再插入一條數據(1,'papa'),然後提交;

但第二次插入數據時,主鍵id已存在,此處會報異常觸發我們的SQL異常處理handler。實現回滾並將error置為1;

查看error值;

4、調用存儲過程之後查看測試表中的數據是否回滾;

調用前:

\

調用中:

\

調用後:

\
建庫SQL:

CREATE DATABASE  IF NOT EXISTS `test`;
USE `test`;
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

綜上,可以通過在存儲過程中聲明異常處理handler使得我們的事物達到回滾效果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved