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