时间:2021-07-01 10:21:17 帮助过:26人阅读
一旦在MySQL的命令行窗口中输入以上语句关闭自动提交,该命令行窗口里的所有DML语句都不会立即生效。上一个事务结束后第一条DML语句将开始一个新的事务,而后续执行的所有SQL语句都处于该事务中,除非显式使用commit来提交事务、或者正常退出、或者运行DDL、DCL语句导致事务隐式提交。当然也可以使用rollback回滚来结束事务,使用rollback结束事务将导致本次事务中的DML语句所做的修改全部失效。
(注意:一个MySQL命令行窗口代表一次连接session,在该窗口里设置set autocommit=0,相当于关闭了该连接session的自动提交,对其他连接不会有任何的影响,即其他命令行窗口不受这个设置影响。)
7、如果不想关闭整个命令行窗口的自动提交,而是想临时性地开始事务。
可以使用MySQL提供的start transaction或begin两个命令,处于start transaction或begin后的DML语句不会立即生效,除非使用commit显式提交事务,或者使用DDL、DCL语句来隐式提交事务。
8、提交,不管是显式提交还是隐式提交,都会结束当前事务;回滚,不管是显式回滚还是隐式回滚,都会结束当前事务。
9、MySQL还提供了savepoint来设置事务的中间点,通过设置事务的中间点可以让事务回滚到指定的中间点,而不是回滚全部事务。
savepoint a;
一旦设置了中间点,就可以使用rollback回滚到指定中间点。
rollback a;
10、JDBC的事务支持
1》JDBC连接也提供了事务支持,JDBC连接的事务支持由Connection提供,Connection默认打开自动提交,即关闭事务。可以调用Connection的setAutoCommit()方法来关闭自动提交,开启事务。
//关闭自动提交,开启事务 conn.setAutoCommit(false);
一旦事务开始之后,程序可以像平常一样创建Statement对象,创建了Statement对象之后,可以执行任意多条DML语句。
程序还可以调用Connection提供的getAutoCommit()方法来返回该连接的自动提交模式。
Connection的commit()方法和rollback()方法:
conn.commit();
conn.rollback();
注意:当Connection遇到一个未处理的SQLException异常时,系统将会非正常退出,事务也会自动回滚。但如果程序捕获了该异常,则需要在异常处理块中显式地回滚事务(手动回滚)。
2》Connection也提供了设置中间点的方法:
1>Savepoint setSavepoint():在当前事务中创建一个未命名的中间点,并返回代表该中间点的Savepoint对象。
2>Savepoint setSavepoint(String name):在当前事务中创建一个具有指定名称的中间点,并返回代表该中间点的Savepoint对象。
根据中间点回滚,并不关心中间点的名字,而是根据中间点对象回滚,Connection的rollback(Savepoint savepoint)方法进行回滚到指定中间点。
MySQL-第十四篇事务管理
标签:save 异常处理 pre 保存 llb 原子性 方法 poi auto