Chinaunix首页 | 论坛 | 博客
  • 博客访问: 426318
  • 博文数量: 137
  • 博客积分: 5190
  • 博客等级: 大校
  • 技术积分: 997
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-21 16:19
文章存档

2011年(17)

2010年(120)

我的朋友

分类: Mysql/postgreSQL

2010-10-26 12:53:16

mysql存储过程没提供UNDO的handler,处理上一般都用其他方法替代了,下面写出测试环境及方法
 
表:
CREATE TABLE `a` (
  `a` int(11) NOT NULL AUTO_INCREMENT,
  `b` int(11) DEFAULT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
 
过程:
CREATE ` PROCEDURE `test1`()
BEGIN
 declare err INT default 0;
 declare continue handler for sqlexception set err=1;
 start transaction;
 insert a values(1,1);
 insert a values(1,1);
 insert a values(2,2);
 if (err=0) then
  commit;
  select 'OK';
 else
  rollback;
  select 'err';
 end if;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
 
执行结果:
) 11:54:12>call test1();
+-----+
| err |
+-----+
| err |
+-----+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
) 11:54:14>select * from a;
Empty set (0.00 sec)
 
完整的事务处理,如果有一个不OK则都回滚
阅读(1757) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-26 18:47:07

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com