事务和锁是两个联系非常紧密的概念,它们保证了数据库的一致性。由于数据库是一个可以由多个用户共享的资源,因此当多个用户并发地存取数据时,就要保证数据的准确性,事务和锁就完成了这项功能。
概念
事务就是一组包含一条或多条语句的逻辑单元,每个事务都是一个原子单位,在事务中的语句被作为一个整体,要么一起被提交,作用在数据库上,使数据库数据永久的修改,要么一起被撤销,对数据库不做任何的修改
对于这个问题比较经典的例子就是银行帐户之间的汇款转账操作.该操作在数据库中由以下3步完成:
1:源帐户减少存储金额,例如 减少1000
2:目标帐户增加存储金额,增加1000
3:在事务日志中记录该事务.
整个交易过程,我们看做一个事务,如果操作失败,那么该事务就会回滚,所有该事务中的操作将撤销,目标帐户和源帐户上的资金都不会出现变化;如果操作成功,那么将是对数据库永久的修改,即使以后服务器断电,也不会对该修改结果有影响.
事务在没有提交之前可以回滚,而且在提交前当前用户可以查看已经修改的数据,但其他用户查看不到该数据,一旦事务提交就不能再撤销修改了,oracle的事务基本控制语句有如下几个:
set transaction :设置事务的属性。
commit:提交事务。
事务的四个特性:
1原子性 事务的原子性是指,事务中程序是数据库的逻辑工作单位,它对数据的修改要么全部执行,要么完全 不执行。原子也意味着不可侵害,不管有多少程序,只要在同一个事务中,那么它们就是一个整体,如果都执行成功才意味着该事务成功,而有一个操作失败,那么同一个事务中的其他操作即使执行成功也没有用,事务会使其全部撤销。
2一致性:
事务的一致性指事务执行的前后数据库都必须处于一致性状态,它是相对脏读而言的。只有在事务完成后才能被所有使用者看见,保证了数据的完整性。例如在银行转账时,从A帐户取款但没有放到B帐户中时数据是不一致的,同时也是不完整的,其他使用者此时不能看到A中修改后的数据,只有存到B帐户中,交易完成并提交事务,这时才算数据一致,所有用户也会看到修改后的数据。
3 分离性:分离性是指并发事务之间不能相互的干扰。也就是说,一个事务操作的数据不会被其他事务看到和操作。
4 持久性:持久性是指一旦事务提交完成,那么这将是对数据永久的修改,即使被修改后的数据遭到破坏,也不会出现回到修改之前的情况。