达梦数据库事务管理的创建使用

1、提交事务/FUT_SWGL_TJ :

--创建表并插入数据:create table FUT_SWGL_TJ (c1 int,c2 varchar(10));

insert into FUT_SWGL_TJ values(1,'aa');

--提交事务:commit;

--查询表数据:select * from FUT_SWGL_TJ;

2、回滚事务/FUT_SWGL_HG:

--建表并插入数据:

create table FUT_SWGL_HG (c1 int,c2 varchar(10));

insert into FUT_SWGL_HG values(1,'aa');

--查询表数据:select * from FUT_SWGL_HG;

--执行回滚:rollback;

--再查询表数据:select * from FUT_SWGL_HG;

返回结果集为空,插入的数据已被回滚掉

3、设置保存点,回滚事务到保存点/FUT_SWGL_BCD;

--建表并插入数据:

create table FUT_SWGL_BCD (c1 int,c2 varchar(10));

insert into FUT_SWGL_BCD values(1,'aa');

--查询表数据:

select * from FUT_SWGL_BCD;

--设置保存点:

savepoint A;

--再插入一条数据:

insert into FUT_SWGL_BCD values(2,'bb');

--回滚到保存点:

ROLLBACK TO SAVEPOINT A;

--再查询表数据:没有第二条插入的记录,步骤4的插入操作被回滚

select * from FUT_SWGL_BCD;

4、设置事务隔离级别,包括读提交、读未提交、可串行化/FUT_SWGL_GLJB

--在事务执行前设置事务的隔离级别为读提交:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

如果发现如上报错,则说明有些事务未提交,在运行中,所以这时我们需要手动提交一下就可以了:commit;

--建表并插入数据:

create table FUT_SWGL_GLJB (c1 int,c2 varchar(10));

insert into FUT_SWGL_GLJB values(1,'aa');

--新开一个查询会话窗口(记为会话2),查询表数据:返回结果集为空

select * from FUT_SWGL_GLJB;

--在原来的查询会话1中执行提交:

commit;

--在会话2中再次查询表数据:即事务1提交后事务2才能查询到事务1中插入的数据

select * from FUT_SWGL_GLJB;

--在事务执行前设置事务的隔离级别为读未提交:新建一个查询会话窗口3,在会话3中执行:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

--建表并插入数据:

create table FUT_SWGL_GLJB02(c1 int,c2 varchar(10));

insert into FUT_SWGL_GLJB02 values(1,'test1');

--新建一个查询会话窗口4,在会话4中执行:即读未提交隔离级下,事务4可以查询到事务3中未提交的数据

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

select * from FUT_SWGL_GLJB02;

--在事务执行前设置事务的隔离级别为读可串行化:新建一个查询会话窗口5,在会话5中执行:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

--建表并插入数据:

create table FUT_SWGL_GLJB03(c1 int,c2 varchar(10));

insert into FUT_SWGL_GLJB03 values(1,'test3aaa');

--新建一个查询会话窗口6,在会话6中执行:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

update FUT_SWGL_GLJB03 set c2='test3bbb' where c1=1;

--会话5中的事务5进行提交:

commit;

--在会话6中执行:查询结果为空

select * from FUT_SWGL_GLJB03;

5、多版本并发控制/FUT_SWGL_DBB

--管理员执行建表:

CREATE TABLE FUT_SWGL_DBB (C1 INT,C2 VARCHAR(20));

--再建一个存储过程向表FUT_SWGL_DBB插入数据:

create or replace procedure P_FUT_SWGL_DBB as declare i int;

begin

for i in 1 ..1000000 loop

insert into FUT_SWGL_DBB values(i,'test1');

 if (i%5000)=0 then

 commit;

 end if;

end loop;

end;

--管理员新建一个用户,并授予该用户对表FUT_SWGL_DBB的操作权限:

create user U_FUT_SWGL_DBB identified by "123456789";

grant DBA to U_FUT_SWGL_DBB;

--用户U_FUT_SWGL_DBB登录数据库:

--管理员执行存储过程向FUT_SWGL_DBB插入1000000条数据:用户查询成功,说明写操作不阻塞同时执行的读操作。由于存储过程是每插入5000行执行一次提交操作,而用户只能查询到在执行查询的时刻已经提交的数据,因此每次查询到的数据条数都不一样,逐次增多,当存储过程执行完毕后,用户查询到的数据条数为1000000条

call P_FUT_SWGL_DBB;

在存储过程执行过程中,用户U_FUT_SWGL_DBB多次执行查询表FUT_SWGL_DBB的操作:

select count(*) from SYSDBA.FUT_SWGL_DBB;

--清除测试环境:

drop table FUT_SWGL_DBB;

drop procedure P_FUT_SWGL_DBB;

drop user U_FUT_SWGL_DBB cascade;

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值