数据库系统概论第八章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
COMMIT(或ROLLBACK)
计算机科学与工程学院
8.1 事务的基本概念
例:银行转帐业务,从A帐户将1000元转帐到B帐户。
实现的过程:
A帐户余额是否足够;
A帐户余额减去1000; 检查B帐户是否合法;
这些操作要么都做, 要么都不做!
B帐户余额加上1000;
计算机科学与工程学院
8.1 事务的基本概念
4、事务的使用实例
在DBMS中进行事务处理
利用显式事务的方式将一系列操作定义成一个事务, 所有操作都完成,则事务提交,否则事务回滚。 或者 进入隐式事务方式,通过COMMIT TRANSACTION 完成一个事务的提交。
计算机科学与工程学院
BEGIN TRAN IF EXISTS(SELECT * FROM BANK WHERE UID='A')
2、事务的特性
原子性(Atomicity)
要么全部执行,要么完全不执行
一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到 另一个一致性状态。
隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
持续性(Durability)
一个事务一旦提交,它对数据库的改变就是永久性的。
BEGIN IF(SELECT [MONEY] FROM BANK WHERE UID='A')>1000 BEGIN UPDATE BANK SET [MONEY]=[MONEY]-1000WHERE UID='A' SELECT * FROM BANK IF EXISTS(SELECT * FROM BANK WHERE UID='B') BEGIN UPDATE BANK SET [MONEY]=[MONEY]+1000 WHERE UID='B' COMMIT TRAN END ELSE ROLLBACK TRAN END ELSE PRINT 'A帐户余额不足!'
String sqlText="update bank set [money]=[money]-1000 where uid='A'";
stmt.executeUpdate(sqlText);
sqlText="select uid from bank where uid='B'";
ResultSet rs = stmt.executeQuery(sqlText);
计算机科学与工程学院
Connection conn=null;
try{
try{
......
conn= DriverManager.getConnection(connectionUrl); conn.setAutoCommit(false); //禁止自动提交事务 //数据库操作
Statement stmt = conn.createStatement();
隐式事务
SET IMPLICITY_TRANSACTIONS ON、 SET IMPLICITY_TRANSACTIONS OFF语句进入和退出 隐式事务连接模式。
自动事务模式
当一个语句成功执行后,它被自动提交,而当事务执行 过程中产生错误时,则被自动回滚。
计算机科学与工程学院
8.1 事务的基本概念(续)
计算机科学与工程学院
8.2 并发控制概述(续)
➢ 并发控制的任务就是避免访问冲突所引起 的数据不一致。数据库管理系统一般都提 供并发控制机制,即采用对资源加锁的方 法控制用户并发操作。
计算机科学与工程学院
8.2 并发控制概述(续)
3、封锁的概念
事务T在对某个数据对象,如表、记录等操作 之前,需要向系统发出请求,对其加锁。加 锁后事务T对该数据对象有了一定的控制,在 事务T释放它的锁之前,其他的事务不能更新 此数据对象。
数据库原理与应用
《数据库系统概论》 第4版
王 珊 萨师煊
第八章 数据库保护
➢ 事务的并发控制 ➢ 数据库的备份与恢复
计算机科学与工程学院
8.1 事务的基本概念
1、事务
事务是用户定义的一个数据库的操作序列, 这些操作要么全做,要么全不做,是一个不 可分割的整体。
BEGIN TRANSACTION SELECT…… UPDATE…… ……
}
}finally{
......
计算机科学与工程学院
8.2 并发控制概述
1、什么是事务的并发执行?
T1
T2
T3
T1
T2 T3
(a)事务的串行执行
(b)事务的并发执行(单处理机)
计算机科学与工程学院
8.2 并发控制概述(续)
2、并发事务带来的不一致性问题
丢失修改
丢失更新问题是由 于两个事务对同一 数据并发写入所引 起的
计算机科学与工程学院
8.1 事务的基本概念(续)
➢ 事务是恢复和并发控制的基本单位。 ➢ 事务的ACID特性可能被破坏的因素:
多个事务并发执行,产生了操作交叉; 事务在运行过程中被强行停止。
计算机科学与工程学院
8.1 事务的基本概念(续)
3、SQL Server中事务的模式
显式事务
通过SQL事务语句而定义的事务 。 BEGIN TRANSCATION、COMMIT TRANSCATION 、 (ROLLBACK TRANSCATION)
Hale Waihona Puke Baidu
if(rs.next()){
sqlText="update bank set [money]=[money]+1000 where uid='B'";
stmt.executeUpdate(sqlText); conn.commit();//事务提交 out.println("转帐成功!");
}else{ conn.rollback();//事务回滚 out.println("转帐失败!");
计算机科学与工程学院
8.2 并发控制概述(续)
2、并发事务带来的不一致性问题
不可重复读
事务T1和T2并发 执行,产生读值 不可复现的情况
计算机科学与工程学院
8.2 并发控制概述(续)
2、并发事务带来的不一致性问题
读脏数据
读脏数据问题是 由于一个事务读 另一个更新事务 尚未提交的数据 所引起的
END ELSE
PRINT '帐户不存在!'
计算机科学与工程学院
8.1 事务的基本概念(续)
4、事务的使用实例
在应用程序中设置事务
例如:在java中,通过调用setAutoCommit(false)方 法关系自动提交事务。采用commit()方法来提交数 据库操作; rollback()方法来进行事务回滚。
计算机科学与工程学院
8.1 事务的基本概念
例:银行转帐业务,从A帐户将1000元转帐到B帐户。
实现的过程:
A帐户余额是否足够;
A帐户余额减去1000; 检查B帐户是否合法;
这些操作要么都做, 要么都不做!
B帐户余额加上1000;
计算机科学与工程学院
8.1 事务的基本概念
4、事务的使用实例
在DBMS中进行事务处理
利用显式事务的方式将一系列操作定义成一个事务, 所有操作都完成,则事务提交,否则事务回滚。 或者 进入隐式事务方式,通过COMMIT TRANSACTION 完成一个事务的提交。
计算机科学与工程学院
BEGIN TRAN IF EXISTS(SELECT * FROM BANK WHERE UID='A')
2、事务的特性
原子性(Atomicity)
要么全部执行,要么完全不执行
一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到 另一个一致性状态。
隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
持续性(Durability)
一个事务一旦提交,它对数据库的改变就是永久性的。
BEGIN IF(SELECT [MONEY] FROM BANK WHERE UID='A')>1000 BEGIN UPDATE BANK SET [MONEY]=[MONEY]-1000WHERE UID='A' SELECT * FROM BANK IF EXISTS(SELECT * FROM BANK WHERE UID='B') BEGIN UPDATE BANK SET [MONEY]=[MONEY]+1000 WHERE UID='B' COMMIT TRAN END ELSE ROLLBACK TRAN END ELSE PRINT 'A帐户余额不足!'
String sqlText="update bank set [money]=[money]-1000 where uid='A'";
stmt.executeUpdate(sqlText);
sqlText="select uid from bank where uid='B'";
ResultSet rs = stmt.executeQuery(sqlText);
计算机科学与工程学院
Connection conn=null;
try{
try{
......
conn= DriverManager.getConnection(connectionUrl); conn.setAutoCommit(false); //禁止自动提交事务 //数据库操作
Statement stmt = conn.createStatement();
隐式事务
SET IMPLICITY_TRANSACTIONS ON、 SET IMPLICITY_TRANSACTIONS OFF语句进入和退出 隐式事务连接模式。
自动事务模式
当一个语句成功执行后,它被自动提交,而当事务执行 过程中产生错误时,则被自动回滚。
计算机科学与工程学院
8.1 事务的基本概念(续)
计算机科学与工程学院
8.2 并发控制概述(续)
➢ 并发控制的任务就是避免访问冲突所引起 的数据不一致。数据库管理系统一般都提 供并发控制机制,即采用对资源加锁的方 法控制用户并发操作。
计算机科学与工程学院
8.2 并发控制概述(续)
3、封锁的概念
事务T在对某个数据对象,如表、记录等操作 之前,需要向系统发出请求,对其加锁。加 锁后事务T对该数据对象有了一定的控制,在 事务T释放它的锁之前,其他的事务不能更新 此数据对象。
数据库原理与应用
《数据库系统概论》 第4版
王 珊 萨师煊
第八章 数据库保护
➢ 事务的并发控制 ➢ 数据库的备份与恢复
计算机科学与工程学院
8.1 事务的基本概念
1、事务
事务是用户定义的一个数据库的操作序列, 这些操作要么全做,要么全不做,是一个不 可分割的整体。
BEGIN TRANSACTION SELECT…… UPDATE…… ……
}
}finally{
......
计算机科学与工程学院
8.2 并发控制概述
1、什么是事务的并发执行?
T1
T2
T3
T1
T2 T3
(a)事务的串行执行
(b)事务的并发执行(单处理机)
计算机科学与工程学院
8.2 并发控制概述(续)
2、并发事务带来的不一致性问题
丢失修改
丢失更新问题是由 于两个事务对同一 数据并发写入所引 起的
计算机科学与工程学院
8.1 事务的基本概念(续)
➢ 事务是恢复和并发控制的基本单位。 ➢ 事务的ACID特性可能被破坏的因素:
多个事务并发执行,产生了操作交叉; 事务在运行过程中被强行停止。
计算机科学与工程学院
8.1 事务的基本概念(续)
3、SQL Server中事务的模式
显式事务
通过SQL事务语句而定义的事务 。 BEGIN TRANSCATION、COMMIT TRANSCATION 、 (ROLLBACK TRANSCATION)
Hale Waihona Puke Baidu
if(rs.next()){
sqlText="update bank set [money]=[money]+1000 where uid='B'";
stmt.executeUpdate(sqlText); conn.commit();//事务提交 out.println("转帐成功!");
}else{ conn.rollback();//事务回滚 out.println("转帐失败!");
计算机科学与工程学院
8.2 并发控制概述(续)
2、并发事务带来的不一致性问题
不可重复读
事务T1和T2并发 执行,产生读值 不可复现的情况
计算机科学与工程学院
8.2 并发控制概述(续)
2、并发事务带来的不一致性问题
读脏数据
读脏数据问题是 由于一个事务读 另一个更新事务 尚未提交的数据 所引起的
END ELSE
PRINT '帐户不存在!'
计算机科学与工程学院
8.1 事务的基本概念(续)
4、事务的使用实例
在应用程序中设置事务
例如:在java中,通过调用setAutoCommit(false)方 法关系自动提交事务。采用commit()方法来提交数 据库操作; rollback()方法来进行事务回滚。