MySQL儲存過程事務回滾

2021-07-25 15:45:29 字數 2971 閱讀 4522

sql過程**:?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

delimiter $$

createdefiner=`root`@`localhost`procedure`test_procedure`()

begin

declareerrnoint;

declarecontinuehandlerforsqlexception

begin

rollback;

seterrno=1;

end;

starttransaction;

seterrno=0;

insertintotest(name)values('kaka');

insertintotest(id,name)values(1,'papa');

commit;

selecterrno;

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

createdatabaseifnotexists `test`;

use `test`;

droptableif exists `test`;

createtable`test` (

`id`int(11)notnullauto_increment,

`name`varchar(45)defaultnull,

primarykey(`id`)

) engine=innodb auto_increment=5defaultcharset=utf8;

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

來自:

sql server儲存過程回滾事務

set nocount on這個很常用 作用 阻止在結果集中返回顯示受t sql語句或則usp影響的行計數資訊。當set oncount on時候,不返回計數,當set nocount off時候,返回計數 即使當set nocount on 時候,也更新 rowcount 當set nocount...

mysql儲存引擎,事務,事務回滾

檢視已有表的使用儲存引擎 show create table 表名 g 檢視當前資料庫的預設儲存引擎和可提供的儲存引擎 show engines 修改儲存引擎 step1 修改配置檔案 etc my.cnf default storage engine 儲存引擎 step2 重啟mysqld服務 修...

mysql事務回滾

先收集網上的一些,待仔細測試研究 事務是資料庫更新操作的基本單位,事務回滾是指將該事務已經完成的對資料庫的更新操作撤銷。所謂事務是使用者定義的乙個資料庫操作序列,這些操作要麼全做要麼全不做,是乙個不可分割的工作 單位。例如,在關聯式資料庫中,乙個事務可以是一條sql語句 一組sql語句或整個程式。簡...