事务管理,锁与阻塞,JDBC,ODBC

达梦事务管理

1.事务简介 数据库事务是指作为单个逻辑工作单元的一系列操作的集合。一个典型的事务由应用程

序中的一组操作序列组成。

1.1事务特性 1.1.1原子性 这一组操作要么一起生效,要么都不生效,事务执行过程中如遇错误,已经执行的操作要全部撤回,这就是事务的原子性。

1.1.2 一致性 数据一致性是指表示客观世界同一事务状态的数据,不管出现在何时何处都是一致的、

正确的、完整的。换句话说,数据一致性是任何点上保证数据以及内部数据结构的完整性,

比如账户之间无论怎么转账,总额不会变等现实约束;年龄不能为负值。

1.1.3隔离性 事务是隔离的,意味着每个事务的执行效果与系统中只有该事务的执行效果一样,也就

是说,某个并发事务所做的修改必须与任何其他的并发事务所做的修改相互隔离。

数据库为了提高资源利用率和事务执行效率、降低响应时间,允许事务并发执行。但是多个事务同时操作同一对象,必然存在冲突,事务的中间状态可能暴露给其它事务,导致一些事务依据其它事务中间状态,把错误的值写到数据库里。需要提供一种机制,保证事务执行不受并发事务的影响,让用户感觉,当前仿佛只有自己发起的事务在执行,这就是隔离性。

1.1.4 持久性 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其

他操作和数据库故障不应该对其有任何影响。

数据只要存储非易失存储介质,宕机就不会导致数据丢失。因此数据库可以采用以下方法来保证持久性:

事务完成前,所有的更改都保证存储到磁盘上了。 (2)提交完成前,事务的更改信息,以日志的形式存储在磁盘,重启过程根据日志恢复出数据库系统的内存状态。

1.2事务开始 对于 DM 数据库来说,第一次执行 SQL 语句时,隐式地启动一个事务。

1.3事务结束 1.3.1显示事务结束 以 COMMIT 或 ROLLBACK 语句/方法显式地结束事务。

1.3.2隐示事务结束 1)当连接的属性设置为自动提交时,每执行一条语句都会提交事务。

2)在执行 DDL 前,DM 数据库会自动把前面的操作进行提交,DDL 前面的操作作为一个完整的事务结束。DDL 语句本身所属事务则根据“DDL_AUTO_COMMIT”配置参数决定是否隐式地提交(注意,无论DDL_AUTO_COMMIT 参数如何设置,ALTER TABLESPACE 和 ALTER USER 操作总是自动提交的)。

3)事务所在的程序正常结束和用户退出;

4)系统非正常终止时。

1.4保存点 为了提高事务管理的灵活性,数据库还提供了设置保存点(SAVEPOINT)和回滚到保存点的功能。保存点提供了一种灵活的回滚,事务在执行中可以回滚到某个保存点,在该

保 存 点 以 前 的 操 作 有 效 , 而 以 后 的 操 作 被 回 滚 掉 。 可 以 使 用 SAVEPOINT SAVEPOINT_NAME 命令创建保存点,使用 ROLLBACK TO SAVEPOINT SAVEPOINT_NAME。

create table t3(c1 int,c2 int);

insert into t3 values(1,1);

--创建保存点a

savepoint a;

insert into t3 values(2,2);

select * from t3;

--回滚到保存点a,再次查看t3,可以看到t3之前插入的数据没有回滚

rollback to savepoint a;

select * from t3;

事务隔离级别

2.1三种读数据类型

1脏读

如果一个事务在提交操作结果之前,另一个事务可以看到该结果,就会发生脏读。

脏读只有在读未提交的隔离级别下才会发生。读未提交隔离级别是最不严格的隔离级别。

*会话1* *会话2*
*create* *table* t3(c1 int,c2 int);*insert* *into* t3 *values*(1,1);*commit*;
*select* * *from* t3;
*SET* *TRANSACTION* *ISOLATION* *LEVEL* *READ* UNCOMMITTED;
*insert* *into* t3 *values*(2,2);--不提交
*select* * *from* t3;

在设置读未提交的隔离级别下,会话1可以读到会话2未提交的事务。

2.不可重复读

一个事务先后读取同一条记录,但两次 读取的数据不同,称之为不可重复读。

这个很好理解,比如A用户在查询某张表的某条记录时,B用户修改了这了一条数据,那么A用户再次查询的时候与上次查询的结果不一致。即*原始读取不可重复*

会话1 会话2
*select* * *from* t3 *where* c2=1;
*update* t3 *set* c1=2 *where* c2=1;*commit*;
*select* * *from*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值