关于Mysql事务问题,Rollback无效

Nick 2011-04-25 02:08:19
问一下,关于Mysql事务问题,

1,testproc 这个表,我已设置为InnoDB类型

2.使用以下测试语句,竟然,第一条语句还是执行成功,数据表还是有一条记录

start transaction; -- 整个存储过程指定为一个事务

INSERT INTO testproc VALUES (1, '22'); -- 语句1
INSERT INTO testproc VALUES (1, '33'); -- 语句2
ROLLBACK;
END;

表中第一字段ID,是主键,不能重复的

请问一下,各位,这到底是什么回事?
...全文
1156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shihang_china 2011-10-05
  • 打赏
  • 举报
回复
MYSQL的数据库引擎中,只有InnoDB和BDB(Berkley DB )包括了对事务处理和外键的支持。如果数据引擎建为MyISAM则rollback无效。
zuoxingyu 2011-05-05
  • 打赏
  • 举报
回复
declare exit handler for sqlexception rollback;
sqlexception 泛指所有的错误。

只要出现任何错误,都执行后面的语句:rollback
Nick 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zuoxingyu 的回复:]
SQL code

create PROCEDURE aa(SqlCMD1 varchar(8000),SqlCMD2 varchar(8000),SqlCMD3 varchar(8000))
begin
declare exit handler for sqlexception rollback;
start TRANSACTION;

PREPA……
[/Quote]

sqlexception 这个变量怎样搞出来还是不懂啊,有没有人可以说清楚一点
ACMAIN_CHM 2011-04-25
  • 打赏
  • 举报
回复
检查你的自动提交

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)

mysql>
rucypli 2011-04-25
  • 打赏
  • 举报
回复
我这里的rollbakc有效
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test5 values(1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test5;
+---+
| a |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

mysql> insert into test5 values(1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> select * from test5;
+---+
| a |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test5;
Empty set (0.01 sec)
Nick 2011-04-25
  • 打赏
  • 举报
回复
为什么执行

declare exit handler for sqlexception rollback; 提示语法错误
wwwwb 2011-04-25
  • 打赏
  • 举报
回复
如果 是主键,插入时要提示错误
用 declare exit handler for sqlexception rollback; 捕获错误
zuoxingyu 2011-04-25
  • 打赏
  • 举报
回复

create PROCEDURE aa(SqlCMD1 varchar(8000),SqlCMD2 varchar(8000),SqlCMD3 varchar(8000))
begin
declare exit handler for sqlexception rollback;
start TRANSACTION;

PREPARE stmt_name FROM SqlCMD1;
EXECUTE stmt_name;
DEALLOCATE stmt_name;
PREPARE stmt_name FROM SqlCMD2;
EXECUTE stmt_name;
DEALLOCATE stmt_name;
PREPARE stmt_name FROM SqlCMD3;
EXECUTE stmt_name;
DEALLOCATE stmt_name;
COMMIT;
end
zuoxingyu 2011-04-25
  • 打赏
  • 举报
回复
delimiter //

CREATE PROCEDURE A()
BEGIN
declare exit handler for sqlexception ; rollback;
INSERT INTO testproc VALUES (1, '22'); -- 语句1
INSERT INTO testproc VALUES (1, '33'); -- 语句2
COMMIT;
end;
//
【课程简介】Secureboot从入门到精通,全网最全最详细最系统讲解secureboot核心知识点。业务安全的基石是APP安全,APP安全的基石是操作系统安全,操作系统安全的基石是SecureBoot安全。不理解SecureBoot安全无法深入理解业务的安全性,也无法进行良好的安全业务设计。 SecureBOOT安全涉及方方面面的知识,掌握Secureboot后,对整个大系统就有了一个宏观的概念,对整个大系统的其它模块学习都有帮助。Secureboot也是一个高门槛的知识点,涉及到密码学基础知识、ARM硬件基础知识、SOC硬件基础知识(如SOC内集成的efuse、crypto engine、RPMB等)、BootRom的实现、emmc/ufs/nand/nor等知识、各种规范和标准、ATF(TF-A)等软件、安全业务的设计模式…所以当我们充分理解了Secureboot,再回头学习其它知识点是,就会变得比较容易.本课程200多页的PPT,手把手教大家Secureboot的理解和各种安全基础知识。【课程收益】掌握当前主流的多样化的硬件架构示例、软件架构示例、启动示例、刷机示例。从根本掌握Secureboot的核心原理,包括但不限于密码学基础知识、Trustzone架构原理、efuse、RPMB、anti-rollback、crypto engine彻底学会SOC大系统启动流程、刷机流程,熟练掌握ATF核心代码,熟悉相关规范手册。学习六种主流的安全启动经典案例,全面掌握Secureboot的设计模型,能否分析其优缺点,能够独立设计其方案【学习对象】1、大学学生、研究生,科研人员;2、嵌入式开发者、底层开发者、芯片开发者3、汽车电子、手机、服务器等。【课程优势】全网唯一全网最全全网最系统 【课程大纲】 【其它课程】

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧