最新消息: 新版网站上线了!!!

在mysql中调用rollback

1.首先建一张测试表

delimiter $$
CREATE TABLE `test` (
  `a` int(1) NOT NULL,
  `b` varchar(2) DEFAULT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

2.然后建一个routine

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_routine`()
BEGIN
    DECLARE ErrFlg  INT DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN
        SET ErrFlg = 1;
    END; 
    start transaction;                              -- 事务机制
    insert into `test`.`test` (a,b) values(4,'dd');
    insert into `test`.`test` (a,b) values(4,'dd'); -- 故意写成一样,然后报错回滚
    IF ErrFlg = 0 THEN
        COMMIT;
    ELSE
        ROLLBACK;
    END IF;
END

3.在mysql中执行call new_routine;会发现test表中没有插入任何数据,说明mysql进行了rollback操作。而如果2中没有红色的那段代码,则test表中插入了(4,dd)这条数据。这说明了事务的原子性。

.....

转载请注明:谷谷点程序 » 在mysql中调用rollback