MySQL回滚问题
SQL中会隐式提交的操作:
1、DDL语句:ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等;
2、修改MYSQL架构的语句:CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD;
3、管理语句:ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等,
总结:设计事务时,不应包含这类语句。如果在事务的前部中发布了一个不能被回滚的语句,则后部的其它语句会发生错误,在这些情况下,通过发布ROLLBACK语句不能 回滚事务的全部效果,简单来说如果这个不能被回滚的语句之前有事务,并且这个不能被回滚的语句执行异常了,之前的修改操作会隐式的提交。
例如:
这种情况下 int i=5/0;发生异常了,上面的修改操作会发生回滚,修改密码失败的。
这种情况下userMapper.dropField(tableName,fieldName);我故意tableName传一个不存在的表名,这里会抛出异常,但是上面的更新密码操作还是会成功(隐式地提交了事务)