存储过程中如何提前返回?
存储过程中如何提前返回?
因为我没有看到类似GOTO的语句,但是有个LEAVE,好像LEAVE是离开一个标号。他能提前返回存储过程吗?
譬如:
BEGIN
SELECT * FROM ..
IF ROW_COUNT() = 1 THEN
LEAVE;
END IF;
END
这样有什么影响?
=======================================================
第2个问题,存储过程不提交会不会自动回滚?这样写有什么问题?
存储过程用手动COMMIT吗?
BEGIN
INSERT ....
SELECT * FROM ..
IF ROW_COUNT() = 1 THEN
# 出错了,那么刚才那个INSERT会不会自动回滚?
# 注意这个存储过程不是在一个事务中。
END IF;
#这里是否需要手动COMMIT;
COMMIT;
END
3)这个问题有点诡异
BEGIN
#如果设置了
SET AUTOCOMMIT = 0;
#但是退出的时候没有COMMIT,也没有设置AUTOCOMMIT;会有什么问题?
# mysql会自动恢复AUTOCOMMIT吗?
END
4) 事务有头无尾怎么办?
BEGIN
START TRANSACTION;
# do something
# 离开的时候我没有调用COMMIT;那么数据便没有写入
# 那么如果我也没有调用ROLLBACK;数据也会自动回滚吧??!!
# 那么此时我再调用START TRANSACTION + COMMIT;会不会连第一次的数据也会写入,因为第一次我并没有调用ROLLBACK?
# 如果我在另外的存储过程中调用START TRANSACTION + COMMIT;又会有什么不一样的情况?、
# 是不是离开存储过程的时候,会自动结束当前事务???
END
非常感谢!