Oracle数据库(十五)——事务和锁——确保数据安全上

事务和锁是两个联系非常紧密的概念,它们保证了数据库的一致性。由于数据库是一个可以由多个用户共享的资源,因此当多个用户并发的存取数据时,就要保证数据的准确性。事务和锁就完成了这项功能。

什么是事务

事务在数据库中主要用于保证数据的一致性,防止出现错误数据。在事务内的语句都会被看成一个单元,一旦有一个失败,所有的都会失败。

事务就是一组包含一条或多条语句的逻辑单元,没个事务都是一个原子单位,在事务中的语句被作为一个整体,要么一起被提交,作用在数据上,使数据库数据永久的修改,要么一起被撤销,对数据库不做任何修改。

对于这个问题比较经典的例子就是银行账户间的回馈操作。

  • 源账户减少存储金额,例如减少1000
  • 目标账户增加存储金额,增加1000
  • 在事务日志中记录该事务

整个交易过程,我们看做一个事务,如果操作失败,那么事务就会回滚,所有操作就会撤销。

事务在没有提交之前可以回滚,而且在提交前用户可以查看已经修稿的数据,但其他用户查看不到该数据,一旦数据提交就不能再撤销修改了。Oracle的事务基本控制语句有如下几个:

  • SET TRANSACTION: 设置事务的属性
  • COMMIT 提交事务
  • SAVEPOINT 设置保存点
  • ROLLBACK 回滚事务
  • ROLLBACK TO SAVEPOINT 回滚至保存点
事务的类型

显示方式:利用命令去完成

新事务的开始
sql statement
...
COMMIT | ROLLBACK;

隐式方式:该类型没有明确的开始和结束,它由数据库自动开启,当一个程序正常结束或使用DDL语言时会自动提交,而操作失败时也会自动回滚,如果设置AUTOCOMMIT为打开状态,每次DML操作都会自动提交。

SET AUTOCOMMIT ON/OFF
事务的保存点

在事务中可以根据自己的需要设置保存点,保存点可以设置在事务中的如何地方,也可以设置多个点,这样就可以把比较长的事务根据需要分成较小的段。一旦把事务回滚到某个保存点后,Oracle将把保存点之后 持有的锁释放掉,这时先前等待被锁资源的事务就可以继续了。而使事务回滚到保存点,有几点需要了解

  • 事务只回滚保存点之后的操作
  • 回滚到某保存点时,它一行的保存点将被删除,但保存点会被保留
  • 保存点之后的锁将被释放,但之前的会被保留
INSERT INTO PRODUCTINFO VALUES('1','保存点测试1',1000,0,00000000,NULL,'测试');

SAVEPOINT FST;

INSERT INTO PRODUCTINGO VALUES('1','保存点测试2',1000,0,00000000,NULL,'测试');

ROLLBACK FST;
事务的ACID特性
  • 原子性:不可分割,是一个整体,同时成功和撤销
  • 一致性:事务执行前后数据库都必须处于一致性状态,只有在事务完成后才能被所有使用者看见
  • 分离性:事务之间不能互相的干扰
  • 持久性:持久性是指一旦事务提交完成,对数据库就是永久的修改

tips:事务提交很重要,但不建议频繁的提交事务,因为每次提交事务都需要时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值