Oracle 12~事物、锁

1. Oracle事物主要用于保持数据一致性,可以看成一个SQL块的整体,只要一个SQL语句错误,SQL块就会一起回滚,要么就是成功全部提交,事物一经提交就不能回滚了。拿来一个银行的例子来说明:

     银行转账分为3步:A给B转500,A账户上减少500;B账户上增加500;向转账记录表中插入一条A向B转500的记录。

     整个交易过程可以看做一个事物,任何一步出错,整个事物都将回滚,否则就会出现数据不一致的情况。

     Oracle事物的基本语法有:

     (1)set transaction:设置事物属性;

     (2)commit :提交事物;

     (3)rollback :回滚事物;

     (4)savepoint:设置保存点;

     (5)rollback to savepoint :回滚到保存点。

       事物可分为显式事物和隐式事物。显式事物由开发者主动控制事物的提交和回滚,如常见的pl/sql语句块必须利用commit提交。隐式事物则是数据库控制的事物的提交和回滚,如DDL语句、DCL语句,或是DML语句设置了自动提交:set autocommit on,都是直接持久化到数据库。

      例,修改地址后设置保存点f1,再次修改地址回滚到保存点f1.

declare
address varchar2(100);
begin
 select t.stuaddress into address from stuinfo t
 where t.stuid = 'sc201801001';
 dbms_output.put_line(address);
 update stuinfo t set t.stuaddress = '福建省厦门市001号'
 where t.stuid = 'sc201801001';
 select t.stuaddress into address from stuinfo t
 where t.stuid = 'sc201801001';
 dbms_output.put_line(address);
 savepoint f1;
 
 update stuinfo t set t.stuaddress = '福建省厦门市002号'
 where t.stuid = 'sc201801001';
 select t.stuaddress into address from stuinfo t where t.stuid = 'sc201801001';
 dbms_output.put_line(address);
 rollback to f1;
 commit;
end;

2.Oracle锁用于数据共享的情景中,是一种访问机制,在访问同一资源时,防止不同事物操作同一数据时,出现数据问题。

   利用Oracle锁机制,多个会话操作同一数据时,优先的会话会锁定该数据,其它会员只能等待,这有点类似操作系统中的资源互斥问题。

    Oracle锁分为排它锁和共享锁。排它锁可以理解为写锁,如果一个事物给某个数据加了排它锁,其它事物就不能再对它加任何锁,直到事物完结,排它锁释放。共享锁可以理解为读锁,加了共享锁的数据,只能共享读,不能再给它加排它锁进行写操作。     

    Oracle锁也包括DML锁、DDL锁。其中DML锁又可细分为行级锁和表级锁。

    行级锁是粒度最细的DML锁,用来控制数据行的修改、删除操作。当对表中某行数据进行修改时,需要对其加上行级排它锁,防止其它事物也对其进行修改,等数据修改完后,事物提交时,自动释放。

    表级锁用来保护数据库对象结构,在修改表数据时,会对表结构加一个表级锁,不允许其它事物对表进行DDL操作。

    以上就是过了一遍Oracle里的基本概念,接下来我想找一些案例或者上机试题练习一下。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值