隔离性:指由并发事务所做的修改必须与 任何其他并发事务所做的修改相隔离。事 务查看数据时数据所处的状态,要么是被 另一并发事务修改之前的状态,要么是被 另一事务修改之后的状态,即事务不会查 看正在由另一个并发事务正在修改的数据。 持久性:指事务完成之后,它对于系统的 影响是永久性的,即使出现系统故障也是 如此
6 • 隔离性:指由并发事务所做的修改必须与 任何其他并发事务所做的修改相隔离。事 务查看数据时数据所处的状态,要么是被 另一并发事务修改之前的状态,要么是被 另一事务修改之后的状态,即事务不会查 看正在由另一个并发事务正在修改的数据。 • 持久性:指事务完成之后,它对于系统的 影响是永久性的,即使出现系统故障也是 如此
事务的类型 隐式事务:每次执行 SQLServer的任何 数据修改语句时,它都是一个隐式事务。 例如:下列SQL语句是一个独立事务: Insert talbe values(1,abc) Update ta ble set coll=5 where coll=l Delete from ta bel where coll=5
7 事务的类型 • 隐式事务 :每次执行SQL Server的任何 数据修改语句时,它都是一个隐式事务。 例如:下列SQL语句是一个独立事务: • Insert talbe values(1,’abc’) • Update table set col1=5 where col1=1 • Delete from table1 where col1=5 • go
显式事务 通常在程序中用 BEGIN TRANSACTION命令来标识 个事务的开始,用 COMMIT TRANSACTION命令标识 事务结束;这两个命令之间的所有语句被视为一体。只 有执行到 COMMIT TRANSACTION命令时,事务中对 数据库的更新操作才算确认。和 BEGIN.END命令类 似。这两个命令也可以进行嵌套,即事务可以嵌套执行
8 显式事务 • 通常在程序中用BEGIN TRANSACTION 命令来标识一 个事务的开始,用COMMIT TRANSACTION 命令标识 事务结束;这两个命令之间的所有语句被视为一体。只 有执行到COMMIT TRANSACTION 命令时,事务中对 数据库的更新操作才算确认。和BEGIN…END 命令类 似。这两个命令也可以进行嵌套,即事务可以嵌套执行
这两个命令的语法如下 BEGIN TRANISACTION transaction name atran name variable COMMIT ITRANSACTIONI transaction name @tran name variable] 其中 BEGIN TRANSACTION可以缩写为 BEGIN TRAN。 COMMIT TRANSACTION可以缩写为 COMMIT TRAN 或 COMMIT。 transaction name:指定事务的名称,只有前32个字符 会被系统识别。 atran name variable:用变量来指定事务的名称变量。 只能声明为CHARⅤ ARCHAR NCHAR或 NVARCHAR 类型
9 • 这两个命令的语法如下 • BEGIN TRAN[SACTION] [transaction_name | @tran_name_variable] • COMMIT [ TRAN[SACTION] [transaction_name | @tran_name_variable] ] • 其中BEGIN TRANSACTION 可以缩写为BEGIN TRAN 。 COMMIT TRANSACTION可以缩写为COMMIT TRAN 或COMMIT 。 • transaction_name:指定事务的名称,只有前32 个字符 会被系统识别。 • @tran_name_variable:用变量来指定事务的名称变量。 只能声明为CHAR VARCHAR NCHAR 或NVARCHAR 类型
例:删除后勤部 declare @transaction name varchar (32) select transaction name=my transaction delete begin transaction @transaction name use sample delete from department where dept id=71012 delete from employee where dept id =10122 commit transaction my transaction delete go
10 • 例: 删除后勤部 • declare @transaction_name varchar(32) • select @transaction_name = ' my_transaction_delete ' • begin transaction @transaction_name • go • use sample • go • delete from department where dept_id = ’1012’ • go • delete from employee where dept_id = ’1012’ • go • commit transaction my_transaction_delete • go