第12章 事务和锁—确保数据安全
事务和锁是两个联系非常紧密的概念,它们保证了数据库的一致性。由于数据库是一个可以由多个用户共享的资源,因此当多个用户并发地存取数据时,就要保证数据的准确性。事务和锁就完成了这项功能。本章将介绍如下知识点:
❑事务的概念和使用
❑锁的概念和使用
12.1 什么是事务
事务在数据库中主要用于保证数据的一致性,防止出现错误数据。在事务内的语句都会被看成一个单元,一旦有一个失败,那么所有的都会失败。在编程过程中也会经常用到事务,本节将从基础开始,带领读者了解事务的概念和种类。
12.1.1 认识事务
事务就是一组包含一条或多条语句的逻辑单元,每个事务都是一个原子单位,在事务中的语句被作为一个整体,要么一起被提交,作用在数据库上,使数据库数据永久的修改;要么一起被撤销,对数据库不做任何的修改。
对于这个问题比较经典的例子就是银行账户之间的汇款转账操作。该操作在数据库中由以下3步完成:
1)源账户减少存储金额,例如减少1000。
2)目标账户增加存储金额,增加1000。
3)在事务日志中记录该事务。
整个交易过程,我们看做一个事务,如果操作失败,那么该事务就会回滚,所有该事务中的操作将撤销,目标账户和源账户上的资金都不会出现变化;如果操作成功,那么将是对数据库永久的修改,即使以后服务器断电,也不会对该修改结果有影响。
事务在没有提交之前可以回滚,而且在提交前当前用户可以查看已经修改的数据,但其他用户查看不到该数据,一旦事务提交就不能再撤销修改了。Oracle的事务基本控制语句有如下几个:
❑SET TRANSACTION:设置事务的属性。
❑COMMIT:提交事务。
❑SAVEPOINT:设置保存点。
❑ROLLBACK:回滚事务。
❑ROLLBACK TO SAVEPOINT:回滚至保存点。
注意 事务和程序不同,一条语句或者多条语句甚至一段程序都可能在一个事务中,而一段程序又可以包含多个事务。事务可以根据自己的需要把一段程序分成多个组,然后把每个组都当成一个单元,而这个单元就可以理解为一个事务。