《转》事务对数据库的重要性

摘要:
事务是用户定义的操作序列。具体来说,它将事务中数据库的所有更新写回磁盘上的物理数据库。因此,当数据库仅包含成功事务提交的结果时,系统将取消事务中数据库上所有已完成的操作,即事务内的操作和使用的数据与其他并发事务隔离,数据库管理系统必须确保多个事务的交叉运行不会影响这些事务的原子性。数据库管理系统必须确保强制终止的事务对数据库和其他事务没有影响。

所谓事务是用户定义的一个操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。

  事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条:

   BEGIN TRANSACTION

   COMMIT

   ROLLBACK

  事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始时的状态。这里的操作指对数据库的更新操作。

  一. 事务的特性

  事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这个四个特性也简称为ACID特性。

  1.原子性

  事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。

  2.一致性

  事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始时的一致状态。

  3.隔离性

  一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

  4.持续性

  持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。

 

事务是恢复和并发控制的基本单位。保证事务ACID特性是事务处理的重要任务。事务ACID特性可能遭到破坏的因素有:

  多个事务并行运行时,不同事务的操作交叉执行。

  事务在运行过程中被强行停止。

  在第一种情况下,数据库管理系统必须保证多个事务的交叉运行不影响这些事务的原子性。在第二种情况下,数据库管理系统必须保证被强行终止的事务对数据库和其它事务没有任何影响。

  这些就是数据库管理系统中恢复机制和并发控制机制的责任。

  二.SQL 事务处理模型

  事务有三种模型:

  1.隐式事务是指每一条数据操作语句都自动地成为一个事物,每个事务都有显式的开始和结束标记。

  2.显式事务是指有显式的开始和结束标记的事物,事务的开始是隐式的,事务的结束有明确的标记。

  3.自动事务是系统自动默认的,开始和结束不用标记

  三.并发控制

  1. 数据库系统一个明显的特点是多个用户共享数据库资源,尤其是多个用户可以同时存取相同数据。

  串行控制:如果事务是顺序执行的,即一个事务完成之后,再开始另一个事务

  并行控制:如果DBMS可以同时接受多个事务,并且这些事务在时间上可以重叠执行。

  2.并发控制概述

  事务是并发控制的基本单位,保证事务ACID的特性是事务处理的重要任务,而并发操作有可能会破坏其ACID特性。

   DBMS并发控制机制的责任:

  对并发操作进行正确调度,保证事务的隔离性更一般,确保数据库的一致性。

  如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括:丢失数据修改、读”脏”数据(脏读)、不可重复读、产生幽灵数据。

(1)丢失数据修改

  当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。如上例。

  再例如,两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改其复本,然后保存更改后的复本,这样就覆盖了原始文档。最后保存其更改复本的编辑人员覆盖了第一个编辑人员所做的更改。如果在第一个编辑人员完成之后第二个编辑人员才能进行更改,则可以避免该问题。

  (2)读“脏”数据(脏读)

  读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被除撤消,而此时T1把已修改过的数据又恢复原值,T2读到的数据与数据库的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。

  例如:一个编辑人员正在更改电子文档。在更改过程中,另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用户。此后,第一个编辑人员认为目前所做的更改是错误的,于是删除了所做的编辑并保存了文档。分发给用户的文档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在过。如果在第一个编辑人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题。

  ( 3)不可重复读

  指事务T1读取数据后,事务T2执行更新操作,使T1无法读取前一次结果。不可重复读包括三种情况:

  事务T1读取某一数据后,T2对其做了修改,当T1再次读该数据后,得到与前一不同的值。

  (4)产生幽灵数据

  按一定条件从数据库中读取了某些记录后,T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失

   T1按一定条件从数据库中读取某些数据记录后,T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。

  例如:一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避题。

  产生这些数据的不致性的主要原因是并发操作破坏了事务的隔离性。

  文章来源: http://songtao87.blog.51cto.com/380457/94720

免责声明:文章转载自《《转》事务对数据库的重要性》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue基于element-ui制作的成绩管理系统(三)主界面 登录后跳转的页面kubernetes安装rabbitmq集群下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SqlServer导入mdf、ldf文件

方法一 连接数据库 右键某一个数据库,新建查询,输入如下代码后运行 EXEC sp_attach_db @dbname = '你的数据库名', @filename1 = 'mdf文件路径(包缀名)', @filename2 = 'Ldf文件路径(包缀名)' 注: 如果导入不成功,则需要修改mdf,ldf文件的权限。...

PostgreSQL(PostGIS)安装和入门的若干问题

更多有关技术经验见小专栏(还有更多开源webgis开发技术):https://xiaozhuanlan.com/topic/7054129683 20190721补充 1. 安装9.x,10.x,11.x均可,建议往高版本走(如果不考虑ArcGIS兼容) 2. 安装时不要选中文 建议选C或者default locale 3. PostGIS导入shp文件的...

基于Qt5 跨平台应用开发

1.Qt简介 2.Qt 编程关键技术 2.1 信号与槽 2.2 Qt事件处理 3.Qt开发与实例分析 3.1 开发环境 3.2 系统实现基本框架 3.3 数据库管理 3.5 对Excel进行操作 4.系统的打包和测试 4.1 Mac系统上打包Qt 4.2 Windows系统上打包Qt。 4.3 发布软件测试 5.Qt开发常见问题 5...

(转)菜鸟学数据库(二)——触发器

本人水平有限,写此博客只为给那些像我一样的菜鸟一点小小的帮助,还请各位大牛不要见笑。 数据库的重要性就不用我多说了吧,我们做的大多数项目都要跟数据库打交道。因此,熟练掌握数据库的各种操作,就成了一个程序员必备的技能。今天我们就来简单说一下触发器。 这篇文章只是对触发器的理论总结,要想彻底了解触发器,参考SqlServer基础之(触发器)(清晰易懂) 触发器...

(转)SQL SERVER的锁机制(一)——概述(锁的种类与范围)

锁定:通俗的讲就是加锁。锁定是 Microsoft SQL Server 数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制。 定义:当有事务操作时,数据库引擎会要求不同类型的锁定,如相关数据行、数据页或是整个数据表,当锁定运行时,会阻止其他事务对已经锁定的数据行、数据页或数据表进行操作。只有在当前事务对于自己锁定的资源不在需要时,才会释放其锁...

使用HMAILSERVER搭建邮件服务器

使用hMailServer搭建邮件服务器 文/玄魂 前言 对于企业用户而言,拥有属于自己的邮件服务器,在员工管理,内部信息沟通,对外推送消息等方面,都大有益处。 本文没有什么高深的技术内容,只是以windows server 2008 为例,使用HMAILServer,介绍搭建邮件服务器的全过程,供参考。 操作系统: 邮件服务组件:(http://w...