1 / 68
文档名称:

第8章数据库保护.ppt

格式:ppt   大小:717KB   页数:68页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第8章数据库保护.ppt

上传人:wz_198613 2018/8/10 文件大小:717 KB

下载得到文件列表

第8章数据库保护.ppt

相关文档

文档介绍

文档介绍:第8章数据库保护
1. 事务


为什么要使用事务
事务是保护数据库的一致性和完整性的重要机制。
由于数据的共享,可能会出现并发操作的现象,即多个用户在同一时刻访问和修改同一数据库中的同一部分数据。
并发操作会产生一系列问题,比如出现由于一个用户对某个数据的操作导致其他用户使用的数据成为无效数据的现象。使用事务可以确保同时发生的行为不会发生冲突,不会影响数据的有效性。
举例
买最后一张机票
一次网上交易
事务的概念
概念
事务是一种机制,是一段程序,是一系列的数据库操作构成的集合,在逻辑上是一个不可分割的工作单元。不管系统中有多少故障出现,不管有多少并发操作,事务中的操作作为一个整体,要么所有的操作都成功执行,要么一个也不执行。
图8-1 事务的执行方式
事务的特性
事务有四个特性:
原子性:事务是一个工作单元,作为一个整体要么都做,要么都不做。
一致性:事务在完成时,必须使数据库内所有的数据都保持一致性状态。
隔离性:一个事务的执行不能被其他的事务所干扰。
持续性:事务一旦提交,它对数据库的改变就是永久的。
在SQL Server中实现事务管理
1. 事务运行的三种模式
1)显式事务
BEGIN TRANSACTION:事务开始的标记。
显示事务由用户自定义,每个事务均以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK语句结束。
COMMIT:提交事务,标识事务成功执行。
ROLLBACK:标识一个非正常事务结束,说明执行过程中遇到错误,事务内所修改的数据被恢复到事务执行前的状态。
在SQL Server中实现事务管理
2)隐式事务
在隐式事务模式下,当前事务提交或回滚后,SQL Server自动开始下一个事务。
SET IMPLICIT_TRANSACTIONS ON --进入隐式事务模式
SET IMPLICIT_TRANSACTIONS OFF --关闭隐式事务模式
可以使SQL Server重新启动一个事务的语句
隐式事务模式的启动和关闭
所有CREATE语句
ALTER TABLE
所有DROP语句
TRUNCATE TABLE
GRANT
REVOKE
INSERT
UPDATE
DELETE
SELECT
OPEN
FETCH
表8-1 使SQL Server重新启动事务的语句
在SQL Server中实现事务管理
例:TRUNCATE TABLE语句可以让用户删除指定表中的所有数据。由TRUNCATE TABLE删除的表数据后,不能使用ROLLBACK撤销。
下面两段程序的执行结果有何不同?
USE TSG
GO
SET IMPLICIT_TRANSACTIONS ON
GO
TRUNCATE table Book
ROLLBACK
GO
SET IMPLICIT_TRANSACTIONS OFF
USE TSG
GO
SET IMPLICIT_TRANSACTIONS ON
GO
DELETE FROM Book
ROLLBACK
GO
SET IMPLICIT_TRANSACTIONS OFF
在SQL Server中实现事务管理
3)自动提交事务
使用BEGIN TRANSACTION语句开始一个显示事务
自动提交事务是SQL Server的默认事务管理模式。将每条单独的T-SQL语句视为一个事务。
使用SET语句进入隐式事务模式
自动提交事务模式的终止
在SQL Server中实现事务管理
2. 使用T-SQL实现事务
语句
含义
BEGIN TRANSACTION
事务开始的标识
SAVE TRANSACTION
设置保存点
ROLLBACK
回滚事务
COMMIT
提交事务
表8-2 事务语句
SQL Server中进行事务处理的语句
在SQL Server中实现事务管理
1)BEGIN TRANSACTION
语法格式:
BEGIN {TRAN|TRANSACTION}[{transaction_name|
***@tran_name_variable}]
transaction_name:事务名称;
***@tran_name_variable:用户定义的、含有有效事务名称的
变量的名称。
2)SAVE TRANSACTION
语法格式:
SAVE {TRAN|TRANSACTION}{savepoint_name|
***@savepoint_variable}
savepoint_name:为分配给保存点的名称