Oracle数据库之(事务处理和锁定)

--事务处理和锁定
--什么是事务处理?
--事务处理的4个属性?原子(同时执行否),一致(数据一致),隔离(互不干扰),持久(永久保存);
--常用的事务管理语句
update s_users a set a.c_name_en='djp' where a.c_loginname='djp';
commit;
--如果在commit时出现网络或机器故障,oracle数据库会在数据字典中保存comment关键字提供的文本内容和相关事务ID,文本内容不得超过50字;
commit comment '更新完成';  
rollback;
--rollback to savepoint ; savepoint;
declare
 v_id varchar2(32):='1234567890';
 begin
    update test1 set id='A22' where id='A11';
   savepoint testA;
   insert into test1(id,pid,oa_id) values(v_id,'123','321');
   commit;
   exception
     when others then
       dbms_output.put_line(sqlcode||';'||sqlerrm);
       rollback to savepoint testA;
 end;
--set transaction; 允许开始一个只读或只写的事务,建立隔离级别或是为当前的事务分配一个回滚段;
--事务属性:语法:set transaction parameter; --参数:read only; read write; 注:必须是事务处理的第一行;
--设置事务的隔离级别 isolation level
--serializable:会使得对已修改但没有提交的数据对象的dml事务失败;
--read committed 对已修改但没有提交的数据库对象cml事务进行修改时,会等待前面的dml锁消失;
--set transaction isolation_level serializable;     没把未提交的事务内的数据算在内;
--set transaction isolation_level read committed;  把未提交的事务内的数据也算在内;
declare
 v_count number(2);
 begin
   commit;
  -- set transaction read only name '统计下表数量';
   set transaction isolation level read committed;
   select count(1) into v_count from test1;
   insert into test1 values('2','2','2');
   commit;
   dbms_output.put_line('数量为'||v_count);
 end;
--锁定
--什么是锁定?如:帐户银行,当更新A用户的帐户时,会锁定当前的记录,不允许其他用户更改,保证了数据一致性和稳定性;
--记录锁定:这里可以模拟一个案例:A,B登录同样的表空间,A先进行表for update; B进行查询,会查询不出来,待A提交事务后,B才能得到查询结果;
--表锁定:表锁定不会阻止用户对表查行查询,只有不同事务尝试修改同样的数据时,才可能出现其中一个事务等待另一个事务完成的现象;
--常用的几张表锁定的模式(这里不多做了解);
--row share 行共享锁:最小限制的锁定,在锁定表的同时允许别的事务并发地对表进行一系列操作,它不允许任何事务对同一表进行独占式的写访问;
--row exclusive 行排它销:当一个表的多条记录被更新时,也允许别的事务对同一个表执行同样操作,但与行共享锁不同的是它不能防止别的事务对同一表的手工锁定或独占的读与写;
--share lock 共享锁 只允许别的事务查询或锁定特定记录,防止任务事务对同一个表插入、修改和删除操作;
--share row exclusive 共享排它锁用于查看整个表,也允许别的用户查看表中记录
--exclusive 排它锁 该事务以独占方式写一鼐表,允许别的用户进行读取查询,但不允许做变更操作;
lock table; 允许用户使用一个特定的锁定模式锁定整个数据表;
--lock table emp in share mode;
--lock table emp in exclusive mode nowait;
--lock table emp in share update mode;
--lock table emp in row row exclusive mode;
--lock table emp in row share mode nowait;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值