ABAP数据库操作06-数据一致性

ABAP数据库操作06-数据一致性

举例说明

案例1(单进程):银行用户A给用户B转账一百元,需要保证A账号里面减少一百元、B账号增加一百元,

​ a、成功时:A账号减少一百元,B账号增加一百元

​ b、失败时:AB两用户金额不变

案例2(多进程):当数据表tab不存在此学号的,往tab中插入该学生记录,当三个用户A、B、C同时操作时,发现tab不存在学生n的记录,各自插入一条记录,此时就会发生学生n在tab中会有3条相同的记录——防范:锁机制

从以上案例可以看出:数据一致性包含单进程、多进程 两种情况

1、逻辑工作单元(简称LUW)

可以按下图解理解什么叫LUW

在这里插入图片描述
在这里插入图片描述

一个逻辑工作单元(LUW)必须保证数据一致性

底层的DBLUW已包含数据一致性

1、简单的逻辑工作单元可参考下面的2.1DBLUW

2、对于比较复杂的LUW(如多屏幕的)2.1中的例子就不适用了,如:开始->屏幕1->屏幕2->结束,在调用屏幕2之前,系统会自动回滚,但到了屏幕2时,即使程序中断,屏幕1的操作也不会回滚——要达到一致性有2中方法:子过程(缺点:不能传参数)、函数SE37

SAP LUW需要我们自己控制

2、单进程数据一致性

commit work

rollback work

2.1 DBLUW

一个LUW运行过程中如果有中断,数据会自动回滚到最初状态

REPORT  zcsdn_lion_db06.

DATA i_wa TYPE zlion_test.

SELECT SINGLE * FROM zlion_test INTO i_wa WHERE xh = 5.

*第一部分.
i_wa-name = '张三'.
MODIFY zlion_test FROM i_wa.
IF sy-subrc = 0.
ENDIF.

*第二部分.
i_wa-sex = '男'.
MODIFY zlion_test FROM i_wa.
IF sy-subrc = 0.
ENDIF.

执行前数据

在这里插入图片描述

1、设置2个断点后执行

2、查看数据—数据已变化

3、在第二个断点执行前关闭程序,再查看数据—数据回滚到程序执行前

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上的案例,在代码中添加commit work,只要有执行到commit work的,即使程序中断,在commit work之前的代码都已生效

REPORT  zcsdn_lion_db06.

DATA i_wa TYPE zlion_test.

SELECT SINGLE * FROM zlion_test INTO i_wa WHERE xh = 5.

*第一部分.
i_wa-name = '张三'.
MODIFY zlion_test FROM i_wa.
IF sy-subrc = 0.
  COMMIT WORK."在执行到commit work的,即使程序中断,在commit work之前的代码都生效,不会回滚
ENDIF.

*第二部分.
i_wa-sex = '男'.
MODIFY zlion_test FROM i_wa.
IF sy-subrc = 0.
ENDIF.

2.2 SAPLUW

方案:调用子程序、函数SE37

待定…

3、多进程数据一致性(锁对象)

锁机制,分三种锁状态

S:Shared lock(也称共享锁),多个用户可同时读取该表的数据,但当有用户修改时,其他用户拒绝访问(不能读取)

E:排他锁,

X:排他锁,

2.1 创建锁对象:SE11,命名以E开头,第二个字母Z或Y,然后跟表名(建议,不用表名也可以)

2.2 创建锁对象成功时,系统会自动创建两个函数:加锁函数、解锁函数,查看SE37,名字用:*锁对象名,在SE37搜索即可

锁对象分为:特定锁(只能锁指定的一个表),通用锁

注意:当对同一个表,先执行通用锁后,特定锁还能继续锁——所以对同一个表通用锁、特定锁不要混用

查看某个表是否有被锁住:SM12

SM12用处:出现某些锁会锁死,在SM12删除该锁

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值