数据库中事务是什么意思?

什么是事务?我们知道,数据库是一个面向多用户的共享机制,因此数据库管理系统应当具备并发控制和封锁机制,保证数据库系统的正常运行。但是当多个用户访问数据库的时候,如果每一个用户程序一个一个的串行执行,则每一时刻只有一个用户执行对数据库的操作,其他用户必须等待,这样的话会严重影响数据库资源的使用。所以数据库管理系统必有能够保证多个用户同时使用数据库。但是这样会出现以下三个主要异常问题:


脏读数据:当第一个用户修改数据时,第二个用户在第一个用户没有确认修改之前读取了该数据,这时可能会出现脏读现象。如果第一个用户确认了修改,第二个用户检索不到数据库中所修改的数据,有时这种现象也称为丢失修改。
不可重复读:当某一个用户对某一行数据进行第一次读取过程后,另外一个用户对该数据进行了修改,从第一个用户的角度来看,如果再次读取原先的数据会发现与前次不同,这就是不可重复读现象。
发生幻象:当第一个用户检查某张表的时候,没有发现某个值X,但是在该用户还没操作完成之前,另外一个用户插入了一个X值,结果,导致第一个用户认为数据库没有X值,而实际上数据库有这个值X。这就是幻象。
用户之间相互干扰,出现的以上问题,后果不堪设想。因此数据库系统采用事务的概念来解决这个问题。


事务是一系列作为一个逻辑单元来执行的操作集合。它是数据库维护数据一致性的单位,它将数据库从一致状态转变为新的一致状态,说的简单一点就是,如果一组处理步骤要么全部发生要么一步也不执行,我们称该组处理步骤为一个事务。这样就保证了数据始终一致的状态,不至于破坏数据的完整性、可靠性。一个事务执行以后,DBMS会自动检查数据库中数据的一致性。


确保数据的一致性是保证数据库里面的数据正确反映现实世界的前提。举个例子大家可能就清楚了,比如一个银行要将一笔钱从A->B;对数据库中的操作主要有两个步骤:一是从A账户中减去这笔钱;二是把B账户中的钱增加一笔。其实这两个步骤操作就是一个逻辑单元,就是一个操作集合,就是一个事务。这就要求两个步骤操作同步执行,要么它们都操作成功,要么都操作失败。如果一个操作失败,整个事务也就失败了,并且已经执行的操作都会被撤消,也就是回滚到先前的状态。


SQLServer启动事务有三种模式:


自动提交:在自动提交模式下,每一个SQL语句就是一个事务(也就是一个操作),语句执行完成以后,事务也就完成了,这时在这模式下,SQLSERVER自动结束事务。SQLSERVER为每个单独的语句提供这种事务模式,以保证数据的一致性。SQLSERVER的默认方式就是这种方式。但是如果是一组语句操作,要想使用事务模式就得采用下面的方式了。
显式:当明确事务开始和结束的点时,所使用的就是显式事务模式。   开始事务语句:Begin Transaction;结束事务语句:Commit(成功提交)、Rollback(事务失败)。
隐式:无论何时使用某些SQL语句,SQLSERVER就会隐式的启动一个事务。在这里他也把每一个SQL语句当作一个事务,只不过这种模式负责启动事务,而自动提交模式负责提交事务,也就是结束事务。
举例说明如:begin transaction update_A  //开始事务


                     Update biao set A=2000


                     rollback transaction  update_A  //结束事务


 上面的情况是在SQL查询分析器中执行的,可以虚拟两个用户,同时对biao进行访问,一个更新数据,一个查询数据,两个用户访问时间交叉。

文章来源:https://blog.csdn.net/qq_35302796/article/details/79125591

猜你喜欢

转载自blog.csdn.net/peng_xiao_yu/article/details/89914851
今日推荐