set autocommit=0指事務非自動提交,自此句執行以后,每個SQL語句或者語句塊所在的事務都需要顯示"commit"才能提交事務。
1、不管autocommit 是1還是0
START TRANSACTION 后,只有當commit數據才會生效,ROLLBACK后就會回滾。
2、當autocommit 為 0 時
不管有沒有START TRANSACTION。
只有當commit數據才會生效,ROLLBACK后就會回滾。
3、如果autocommit 為1 ,並且沒有START TRANSACTION 。
調用ROLLBACK是沒有用的。即便設置了SAVEPOINT。
回滾成功
set autocommit =1; DELIMITER $$ DROP PROCEDURE IF EXISTS mmmm $$ CREATE DEFINER=`tms_admin`@`%` PROCEDURE `mmmm`() BEGIN DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET t_error=1; START TRANSACTION; SAVEPOINT p1; update t_user set instance_seq_id = 'tt00006'; update t_user set instance_seq_id000 = 'tt00007'; IF t_error = 1 THEN ROLLBACK to p1; ELSE COMMIT; END IF; END$$ DELIMITER ; CALL `tms_inst_tt00003`.`mmmm`();
set autocommit =0; DELIMITER $$ DROP PROCEDURE IF EXISTS mmmm $$ CREATE DEFINER=`tms_admin`@`%` PROCEDURE `mmmm`() BEGIN DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET t_error=1; START TRANSACTION; SAVEPOINT p1; update t_user set instance_seq_id = 'tt00006'; update t_user set instance_seq_id000 = 'tt00007'; IF t_error = 1 THEN ROLLBACK to p1; ELSE COMMIT; END IF; END$$ DELIMITER ; CALL `tms_inst_tt00003`.`mmmm`();
回滾成功
set autocommit =0; DELIMITER $$ DROP PROCEDURE IF EXISTS mmmm $$ CREATE DEFINER=`tms_admin`@`%` PROCEDURE `mmmm`() BEGIN DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET t_error=1; SAVEPOINT p1; update t_user set instance_seq_id = 'tt00006'; update t_user set instance_seq_id000 = 'tt00007'; IF t_error = 1 THEN ROLLBACK to p1; ELSE COMMIT; END IF; END$$ DELIMITER ;
回滾成功