欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

三大常用关系型数据库事务详解之二:基本事务命令

程序员文章站 2023-10-31 10:56:46
二、事务基本命令介绍 说明:命令中, | (垂直条) 分隔括号或大括号中的语法项。 只能使用其中一项。[ ](方括号) 可选语法项。 不要键入方括号。{}(大括号) 必选语法项。 不要键入大括号。 1. SQL SERVER 1) BEGIN { TRAN | TRANSACTION } [ { t ......

二、事务基本命令介绍

说明:命令中,

| (垂直条) 分隔括号或大括号中的语法项。 只能使用其中一项。
[ ](方括号) 可选语法项。 不要键入方括号。
{}(大括号) 必选语法项。 不要键入大括号。

 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;