MySQL儲存過程事務回滾
SQL過程程式碼:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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:
1 2 3 4 5 6 7 8 |
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使得我們的事物達到回滾效果
來自:http://www.2cto.com/database/201506/404337.html
相關推薦
MySQL儲存過程事務回滾
SQL過程程式碼: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `test_procedure`
Mysql儲存過程的回滾
在Mysql資料據中建立儲存過程執行多條SQL語句,當遇到問題時將所有的執行都回滾,這樣儲存過程就實現了事物操作。 實現過程:定義一個變數t_error初始值為0,再宣告一條語句,如果執行SQL的時候捕獲到異常,設定t_error的值為1,在儲存過程前設定 autocomm
MySQL的rollback--事務回滾
MySQL version:5.7 首先:事務回滾只用於DML,不適用於DDL。對於DDL的回滾,以後有時間再說。 關於rollback和commit,MySQL的文件已經說的很詳細了,選擇其中一個簡單的例子再絮叨下: mysql> CREATE TABLE custom
關於Navicat for mysql批量提交事務回滾的問題
-- 本人用的是mysql 5.7.20測試的-- 引用:-- http://blog.51cto.com/lujinxiong/1844769 Navicat for mysql 快捷鍵 -- https://blog.csdn.net/ocean1010/article/
MySQL儲存過程 事務transaction
Mysql中,單個Store Procedure(SP)不是原子操作,而oracle則是原子的。如下的儲存過程,即使語句2失敗,語句1仍然會被commit到資料庫中: create table testproc(id int(4) primary key, name
Mysql存儲過程中的事務回滾
異常 procedure mysq span val com cnblogs 事務 erro create procedure test(in a int) BEGIN DECLARE t_error INTEGER DEFAULT 0;
MySql儲存過程捕獲異常回滾
DROP PROCEDURE IF EXISTS pro_test;CREATE PROCEDURE pro_test( para_a varchar(50), para_b varchar(50))BEGIN DECLARE result_code INT
mysql儲存過程以"陣列"形式入參實現表間複製 並實現回滾
這個程式碼是我需要實現,前端稽核某個稽核後,這個資料會在另一個頁面中呈現,涉及到兩個資料庫表。一下內容是用於測試的程式碼。 前端進行處理,將id封裝成陣列後提交到Java後臺,"陣列"使用 - 來分隔,是因為入參時,我使用了逗號,但是測試失敗了,就改用-或空格 在點提交後
mysql事務回滾
技術分享 default null 刪除 inf nod .com efault 人員 mysql使用事務前需確定存儲引擎為innodb,譬如刪除一個人員數據,會刪除和這個人有關的一些數據刪除,這個時候就會用到事務,出現一個刪除錯誤整個刪除事務就會取消。 事務回滾步驟: /
mysql儲存過程迴圈事務插入資料
DROP PROCEDURE IF EXISTS insertTUserStatement; create procedure insertTUserStatement(IN num int) begin declare i int; start transac
mysql 事務 回滾
事務的四個特性ACID,原子性,一致性,隔離性,永續性, 開始一個事務: ->begin;或者start transaction; ->sql語句 ->savepoint identifier,(建立一個儲存點) ->commit;或者rollback;
mysql事務回滾機制概述
應用場景: 銀行取錢,從ATM機取錢,分為以下幾個步驟 1 登陸ATM機,輸入密碼; 2 連線資料庫,驗證密碼; 3 驗證成功,獲得使用者資訊,比如存款餘額等; 4 使用者輸入需要取款的金額,按下確認鍵; 5 從後臺資料庫中減
MySQL事務回滾rollback與提交commit的操作
1.>D: 2.>cd program files\mysql\bin 3.>mysql -uroot -p123456 4.>show databases; 5.&
Transactional 事務回滾 分析
transactionalSpring的AOP事務管理默認是針對unchecked exception回滾(運行期異常,Runtime Exception)。 unchecked ,就是不用手工寫try catch的exception Exception作為基類,下面還分checked exception
Mysql儲存過程8:repeat循環
local cal 其他 host ted query code class pan 語法: repeat SQL until 條件 end repeat; 就是相當於其他語言中的: do{ # }while(); mys
Mysql儲存過程4:mysql變量設置
from 默認 pan procedure weight use mysql變量 sql 寫法 默認全局變量是兩個@@開頭, 可用show variables查看所有默認變量: @@user #declare定義變量只能用在儲存過程中 #declare 變量名 數據類型
Mysql儲存過程3:if語句
sql語句 inpu arguments ted div mysql then for clas --if/else語句 if 條件 then SQL語句 else SQL語句elseifSQL語句 end if; create procedure test1( n
Mysql儲存過程2:變量定義與參數傳遞
變量定義 color ted lec mysq 傳遞 參數傳遞 fault 可選 #儲存過程 中的變量定義 declare 變量名 類型 可選類型 -- 跟建表差不多 create procedure p() begin declare age int de
Spring 實現部分事務回滾
light back true prop 回滾 sage .class lba aaa 例如有業務需求,在catch異常後,catch塊內把異常的信息存入到數據庫,而catch外的數據全部回滾 try { ....... aaaService.save();
回滾的意義---JDBC事務回滾探究
final cti span net etc rom tle img round JDBC手動事務提交回滾的常見寫法一直是rollback寫在commit的catch之後: try{ conn.setAutoCommit(false); ps.execu