三大常用关系型数据库事务详解之二:基本事务命令
二、事务基本命令介绍
说明:命令中,
| (垂直条) 分隔括号或大括号中的语法项。 只能使用其中一项。
[ ](方括号) 可选语法项。 不要键入方括号。
{}(大括号) 必选语法项。 不要键入大括号。
1. sql server
1) begin { tran | transaction } [ { transaction_name | @tran_name_variable } [ with mark [ 'description' ] ] ] [ ; ]
表示显式地开启一个名称为transaction_name或@tran_name_variable的值的本地事务。
2)begin distributed { tran | transaction } [ transaction_name | @tran_name_variable ] [ ; ]
表示显式地开启一个名称为transaction_name或@tran_name_variable的值的分布式事务
3)commit [ { tran | transaction } [ transaction_name | @tran_name_variable ] ] [ with ( delayed_durability = { off | on } ) ] [ ; ]
表示提交事务并释放事务使用资源,自事务开始以来的所有数据变更都会成为数据库的永久部分。中括号中内容可以省略,所以commit事务的提交 与commit transaction功能相同。
4)commit [ work ] [ ; ]
提交并结束事务。与commit transaction 功能相同,但 commit transaction 接受指定事务名称。 此语法与 sql-92 兼容。
5)rollback { tran | transaction } [ transaction_name | @tran_name_variable | savepoint_name | @savepoint_variable ] [ ; ]
表示将事务回滚到起点或者指定保存点,以清除自事务的起点到某个保存点的所有数据更改,并释放相关资源。中括号中内容可以省略,rollback 事务的回滚与rollback transaction功能相同。
6)rollback [ work ] [ ; ]
将事务回滚到事务的起点。与 rollback transaction 功能相同,但 rollback transaction 可以指定事务名称。此rollback 兼容 iso 标准。
嵌套事务时,rollback work 始终回滚到最远的 begin transaction 语句,并将 @@trancount 系统函数减为 0
7)save { tran | transaction } { savepoint_name | @savepoint_variable } [ ; ]
在事务内设置事务保存点。savepoint_name是分配给保存点的名称。@savepoint_variable是包含有效保存点名称的用户定义变量的名称。
8)set transaction isolation level { read uncommitted | read committed | repeatable read | snapshot | serializable }
设置事务隔离级别。
begin transaction tr_accounttransfer; --a账号中减去1000元 update [dbo].[account] set amount = amount -1000.00 where [name] = 'a'; --b账号中加上1000元 update [dbo].[account] set amount = amount + 1000.00 where [name] = 'b'; commit transaction tr_accounttransfer;
2. mysql
mysql 中,只有使用了innodb数据库引擎的数据库或表才支持事务。
1)start transaction | begin [work]
start transaction或begin [work]都用来开启事务。
2)commit [work] [and [no] chain] [[no] release]
提交当前事务,使自事务开始后的变更成为永久变更。
3)rollback [work] [and [no] chain] [[no] release]
回滚事务到事务起点,取消事务期间的所有变更。
4)savepoint identifier
在事务中创建指定标识符的保存点。
5)rollback [work] to savepoint identifier
把事务回滚到指定的事务保存点。
6)release savepoint identifier
删除指定的事务保存点。
7)set [global | session] transaction isolation level
{ read uncommitted | read committed | repeatable read | serializable }
设置事务隔离等级。
begin --a账号中减去1000元 update account set amount = amount -1000.00 where name = 'a'; --b账号中加上1000元 update account set amount = amount + 1000.00 where name = 'b'; commit;
3. oracle
oracle事务起始于第一条sql语句的执行,不需要特别指定事务的开始和结束,一个事务结束就意味着下一事务开始。事务终止于下列四种情况:
- commit或不带有savepoint子句的rollback命令。
- 用户运行ddl命令时,隐式提交。ddl命令如:create,drop,rename, or alter。
- 断开数据库连接时。
- 客户进程异常终止,导致事务隐式回滚。
1)commit
提交事务中所有更改,结束事务。
2)rollback
回滚事务中所有更改,结束事务。
3) savepoint identifier
创建保存点,以便可以事务中更改回滚到这个保存点。
4)rollback to savepoint identifier
回滚事务中的更改到指定保存点。
5)release savepoint identifier
删除指定保存点。
6)set transaction [ read only | read write ]
[ isolation level [ serialize | read commited ]
[ use rollback segment 'segment_name' ]
[ name 'transaction_name' ];
设置事务属性。
--a账号中减去1000元 update account set amount = amount -1000.00 where name = 'a'; --b账号中加上1000元 update account set amount = amount + 1000.00 where name = 'b'; commit;
上一篇: 如何写出让同事无法维护的代码?