Ch4 PL/SQL数据更改和管理事务

DML 隐式游标(如下)                                  单行DQL 隐式或显式游标                              多行DQL    显式游标

隐式游标

    %FOUND   指出了当PL/SQL代码最后从游标的结果集中获取记录时,找到了记录。
  %NOTFOUND  指出了当PL/SQL代码最后从游标的结果集中获取记录时,结果集中没有记录。
  %ROWCOUNT   返回当前时刻还没有从游标中获取的记录数量。
  %ISOPEN   对于隐式游标而言,属性%ISOPEN的值总是false,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。

下右图中可以returning代替return,效果一样

 若集合类型returning a(单量) bulk collect into b(集合类型,不加下标)  再用for indx  in  b.first..b.last  得到b.(indx)的值

Ch4 PL/SQL数据更改和管理事务 - yongzhian - 暗夜逐影
批量DML——forall  下右边效率高  其隐式游标一样 但影响1到多则true
Ch4 PL/SQL数据更改和管理事务 - yongzhian - 暗夜逐影

 数据库事务

一组SQL语句组成的一个逻辑单元看作数据库事务,具有(ACID)原子性(atomicity) 、一直性(consistency)、隔离性(isolation) 、持久性(durability)。若一个事务有问题则所有回滚(rollback),所有成功则提交(commit),提交后不可回滚。

事务处理:1、开始事务DML和DQL  2、执行SQL语句  3、提交事务,DDL、DCL自动提交,commit或commit commit a;(少于50字符)

                4、回滚事务,可以savapoint a;在rollback to savapoint a;

数据库中的锁  1内部锁或闩(自动创建和释放)  2、DDL锁(使用时自动创建)  3、DML(事务开始时创建)

 锁描述 解释 SQL操作
 S(Share) 共享锁

 Create index、Lock share  如:Lock Table TableName   In Share Mode

X(Exclusive) 排它锁

 Alter table、Drop able、Drop index、Truncate table 、Lock exclusive          如:Lock Table TableName  In Exclusive Mode;

 RS(Row-S) 行级共享锁,其他对象只能查询这些数据行 Select for update、Lock for update、Lock row share                        如:LOCK TABLE TableName IN ROW SHARE MODE;
SX(Row-X) 行级排它锁,在提交前不允许做DML操作 Insert、Update、Delete、Lock row share                                       如:LOCK TABLE TableName IN ROW EXCLUSIVE MODE;
 SSX(S/Row-X) 共享行级排它锁Lock Table TableName  In Share Row Exclusive Mode;
   锁粒度 行级锁(TX)  表级锁(TM)  数据库级锁

事务隔离级别 有效保证并发读取数据的正确性

脏读(Dirty Reads)一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。

不可重复读(Non-repeatable Reads)一个事务对同一行数据重复读取两次,但是却得到了不同的结果。

1、未授权读取 也称为读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

2、授权读取 也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。oracle支持

3、可重复读取 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。

4、序列化(Serializable)或可串行读:提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。   oracle支持

防止死锁  1、最低事务隔离   2、保持事务尽可能短 3、事务内部按一定顺序访问数据库对象  4、等待用户输入时不要让事务持续打开

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值