什么是数据库事务,为什么要引入数据库事务,数据库事务的特征是什么

Oracle学习笔记 专栏收录该内容
3 篇文章 0 订阅

1.事务(Transaction)是并发控制的基本单位。

所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。 。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。


事务和程序的关系:事务和程序是两个概念。一般地讲,一个程序中包含多个事务。

针对上面的描述可以看出,事务的提出主要是为了解决并发情况下保持数据一致性的问题。


2.事务的语句

在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。 
 开始事务:BEGIN TRANSACTION(事务)
 提交事务:COMMIT TRANSACTION(事务)
 回滚事务:ROLLBACK TRANSACTION(事务)


3.事务的4个属性

   Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败(减款,增款必须一起完成)。

●   Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。事务的运行并不改变数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。

●   Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

●   Durability(持久性):事务完成之后,它对于 系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库

4.事务的保存点

  SAVE TRANSACTION 保存点名称 --自定义保存点的名称和位置
  ROLLBACK TRANSACTION 保存点名称 --回滚到自定义的保存点
显示事务被用begin transaction 与 end transaction 标识起来,其中的 update 与 delete 语句或者全部执行或者全部不执行。。 如:
begin transaction T1
update student
set name='Tank'
where id=2006010
delete from student
where id=2006011
commit
简单地说,事务是一种机制,用以维护数据库的完整性。

其实现形式就是将普通的SQL语句嵌入到Begin Tran...Commit Tran 中(或完整形式 Begin Transaction...Commit Transaction),当然,必要时还可以使用RollBack Tran 回滚事务,即撤销操作。

利用事务机制,对数据库的操作要么全部执行,要么全部不执行,保证数据库的一致性。需要使用事务的SQL语句通常是更新和删除操作等。

end transaction T1

关于savepoint

用户在事务(transaction)内可以声明(declare)被称为保存点(savepoint)
的标记。保存点将一个大事务划分为较小的片断。

用户可以使用保存点(savepoint)在事务(transaction)内的任意位置作标
记。之后用户在对事务进行回滚操作(rolling back)时,就可以选择从当前
执行位置回滚到事务内的任意一个保存点。例如用户可以在一系列复杂的更
新(update)操作之间插入保存点,如果执行过程中一个语句出现错误,用
户 可以回滚到错误之前的某个保存点,而不必重新提交所有的语句。

在开发应用程序时也同样可以使用保存点(savepoint)。如果一个过程
(procedure)内包含多个函数(function),用户可以在每个函数的开始位置
创建一个保存点。当一个函数失败时, 就很容易将数据恢复到函数执行之前
的状态,回滚(roll back)后可以修改参数重新调用函数,或执行相关的错误
处理。

当事务(transaction)被回滚(rollback)到某个保存点(savepoint)后,
Oracle将释放由被回滚语句使用的锁。其他等待被锁资源的事务就可以继续
执行。需要更新(update)被锁数据行的事务也可以继续执行。

将事务(transaction)回滚(roll back)到某个保存点(savepoint)的过程如
下:
1. Oracle 回滚指定保存点之后的语句
2. Oracle 保留指定的保存点,但其后创建的保存点都将被清除
3. Oracle 释放此保存点后获得的表级锁(table lock)与行级锁(row
lock),但之前的数据锁依然保留。

被部分回滚的事务(transaction)依然处于活动状态,可以继续执行。

一个事务(transaction)在等待其他事务的过程中,进行回滚(roll back)到
某个保存点(savepoint)的操作不会释放行级锁(row lock)。为了避免事务
因为不能获得锁而被挂起,应在执行 UPDATE 或 DELETE 操作前使用 FOR
UPDATE ... NOWAIT 语句。(以上内容讲述的是回滚保存点之前所获得的
锁。而在保存点之后获得的行级锁是会被释放的,同时保存点之后执行的
SQL 语句也会被完全回滚)。


转载:https://blog.csdn.net/libaoshan55/article/details/78175415

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p> <span style="background-color:#FFFFFF;font-size:14px;">本课程会详细介绍数据库基础概念以及常用数据库实战操作。</span> </p> <p> <span style="background-color:#FFFFFF;font-size:14px;">本课程从概念、实战和原理三方面深入讲解了Oracle数据库方方面面课程内容涵盖了Oracle数据库绝大部分基础知识以及高级编程常见案例和应用。大家既可以全部学习掌握整个oracle体系知识也可以选择性观看自己需部分内容。</span> </p> <p> <span style="background-color:#FFFFFF;font-size:14px;">本课程覆盖内容点如下所示。</span> </p> <p> <span style="color:#000000;font-size:14px;background-color:#FFFFFF;">1.数据库基础概念</span> </p> <p> <span style="color:#000000;font-size:14px;background-color:#FFFFFF;">2.数据库CRUD等基本操作</span> </p> <p> <span style="color:#000000;font-size:14px;background-color:#FFFFFF;">3.数据库</span><span style="background-color:#FFFFFF;font-size:14px;">存储过程、存储函数、触发器、事务、索引、序列、PLSQL等数据库高级编程相关技术</span> </p> <p> <span style="background-color:#FFFFFF;font-size:14px;">4.分布式数据库</span> </p> <p> <span style="background-color:#FFFFFF;font-size:14px;"></span><span style="background-color:#FFFFFF;font-size:14px;">     学习完本课程后大家可以快速进行数据库开发并且能够独立完成常见数据库操作以及分布式数据搭建。</span><span style="background-color:#FFFFFF;font-size:14px;">本课程讲解采用了图文结</span><span style="background-color:#FFFFFF;font-size:14px;">合</span><span style="background-color:#FFFFFF;font-size:14px;">方式对每个知识点讲解都配有详细且完整案例对于重难点讲解也配有绘图可以帮助大家快速掌握数据库各个细节。</span> </p> <p> <br /></p>
相关推荐
<span style="font-size:14px;">一、课程简介</span><br /><p> <span style="font-size:14px;"><span style="color:#E56600;">『Java学习指南系列』</span>第8篇教程 介绍MySQL数据库安装使用常见SQL语句以及使用JDBC进行数据库开发技术。</span> </p> <p> <span style="font-size:14px;"><br /></span> </p> <p> <span style="font-size:14px;">二、主内容 </span> </p> <p> <span style="font-size:14px;">* MySQL安装和使用</span> </p> <p> <span style="font-size:14px;">* 常用SQL语句增删改查操作</span> </p> <p> <span style="font-size:14px;">* 高级SQL查询多表关联查询</span> </p> <p> <span style="font-size:14px;">* 表设计:主键索引内连接外连接外键</span><span style="font-size:14px;"> </span> </p> <p> <span style="font-size:14px;">* MySQL配置管理: 用户授权远程访问备份还原</span> </p> <p> <span style="font-size:14px;">* JDBC连接: 使用JDBC连接数据库执行增删改查操作</span> </p> <span style="font-size:14px;">* 基于JDBC数据库框架设计(afsql框架)以此阐述数据库框架设计原理</span><br /><p> <span style="font-size:14px;">* JDBC连接池JDBC数据库开发必备技术</span> </p> <p> <span style="font-size:14px;">* 数据库事务 Transaction 支持 </span> </p> <p> <span style="font-size:14px;">* SQL转义数据库注入攻击预防</span> </p> <p> <span style="font-size:14px;">* 数据库动态访问:获取数据库和表结构根据表结构自动生成POJO</span> </p> <p> <span style="font-size:14px;"><br /></span> </p> <p> <span style="font-size:14px;">三、课程体系</span> </p> <p> <span style="font-size:14px;color:#E56600;">〖Java学习指南</span><span style="font-size:14px;color:#E56600;">系列</span><span style="font-size:14px;"><span style="color:#E56600;">〗</span>:包含入门与进阶语法Swing桌面开发安卓开发JavaFX开发网络通信Socket数据结构与算法等课程。</span> </p> <p> <span style="font-size:14px;color:#E56600;">〖网站开发</span><span style="font-size:14px;color:#E56600;">系列</span><span style="font-size:14px;"><span style="color:#E56600;">〗</span>:包含网页基础、网站入门、数据库、网站级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。</span> </p>
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值