三、事务的运行模式
通常,事务以3种模式运行,他们分别是:
1. 自动提交事务
每一条单独的sql语句都在其执行完成后进行自动提交事务,即执行 sql 语句后就会马上自动隐式执行 commit 操作。如果出现错误,则进行事务回滚至之前状态。
sql server和my sql中都默认开启自动提交事务,oracle则显式提交事务。这三种产品都提供了各自的方式来开闭自动提交事务模式,具体如下:
1)mysql中通过下面语句来开启或关闭当前会话或全局的自动提交事务模式。
set session autocommit=0; -- 0是关闭,1是开启;session是设置当前会话变量,global是设置全局变量
2)sql server中使用下面语句来关闭或打开自动提交事务模式 。或者通过 sql server managerment studio,在 tools -> options query execution -> sql server -> ansi 选项中勾选set implicit_transactions设置开启还是关闭自动事务提交模式。
set implicit_transactions on; -- on是打开隐式事务模式或关闭自动事务模式,off 是关闭隐式事务模式或打开自动提交事务模式
3)oracle通过如下语句开启或者关闭自动提交事务模式
set autocommit on; -- on是开启自动事务模式,off是关闭自动提交事务模式
2. 显式事务
通过指定事务开始语句来显式开启事务来作为开始,并由以提交命令或者回滚命令来提交或者回滚事务作为结束的一段代码就是一个用户定义的显式事务。sql server、mysql和oracle都以不同的方式来开始显式事务,具体如下:
1)sql server 以begin [ tran | transaction ] 作为开始,以commit [ work | tran | transaction ] 或者 rollback [ work | tran | transaction ] 作为结束。
2)mysql 以start transaction | begin [work]作为开始,以commit [ work ] 或者 rollback [ work ] 作为结束。
3)oracle事务起始于第一条sql语句的执行,不需要特别指定事务的开始和结束,一个事务结束就意味着下一事务开始。以commit或不带有savepoint子句的rollback命令作为结束。
3. 隐式事务
在隐式事务中,无需使用begin tranasaction 来开启事务,每个sql语句第一次执行就会开启一个事务,直到用commit [transaction]来提交或者rollback [transaction]来回滚结束事务。
1)sql server中使用下面语句来开启和关闭隐式事务模式。或者通过 sql server managerment studio,在 tools -> options query execution -> sql server -> ansi 选项中勾选set implicit_transactions设置开启还是关闭隐式事务模式。
set implicit_transactions on --on是开启,off是关闭
2)oracle默认就是隐式开启事务,显式提交事务。可以通过下面语句开启自动提交事务,以达到隐式提交事务。
set autocommit on; -- on是开启自动事务模式,off是关闭自动提交事务模式
3)mysql通过关闭自动提交事务,来达到隐式开启事务,显式提交事务的目的。
set session autocommit = 0; -- 0是关闭,1是开启;session是设置当前会话变量,global是设置全局变量