事务和锁

好久没找工作了……孤注一掷注定失败

事务和锁

 

事务和锁是数据库中联系紧密的两个概念,用于保证数据的一致性。

 

什么是事务?

事务在数据库中主要用于保证数据的一致性,防止出现错误数据。在事务内的语句都会被看成一个单元,一旦有一个失败,那么所有的都会失败。

         事务就是一组包含一条或者多条语句的逻辑单元,每个事务都是一个原子单位,在事务中的语句被看作为一个整体,要么一起提交,作用在数据库上,使数据库数据永久的修改;要么一起被撤销,对数据库不做任何修改。

 

事务的特性

事务有以下四个特性(ACID):

ü  原子性:指事务全有或全无的性质,也就是说,事务应作为一个工作单元,事务处理完后,所有的工作要么全在数据库中保存下来,要么全部回滚,全部不保留。

ü  一致性:保证事务执行前后数据库必须处于一致的状态。

ü  隔离性:多个事务同时进行时,它们之间应该相互不干扰。事务过程中暂时不一致的数据不能被其他事务应用,直到数据一致。

ü  永久性:事务一旦提交,那么这将是对数据永久的修改。

 

开始事务

         SQL Server中有3中开始事务的方式:隐式事务、显示开始、自动提交,缺省为自动提交。

ü  自动提交:对于用户发出的每条SQL语句,SQL都会自动开始一个事务,并且在执行后自通进行提交操作来完成这个事务。在这种模式下,一个SQL语句就是一个事务。

ü  显示开始:以BEGIN TRANSACTION命令开始一个事务。

ü  隐式开始:任何DML语句(deleteupdateinsert)都会开启一个事务,而事务以commitrollback结束。

Oracle数据库和SQL Server有所不同。Oracle数据库不用显示的设置事务的开始,任何一条DML语句都会开始一个事务,直到用户发出commitrollback操作,这个事务才结束。当执行到下一条DDL语句时,即使用户没有发出commitrollback语句,Oracle也会提交当前事务。

 

事务的保存点

         在事务中可以根据自己的需要设置保存点。保存点可以设置在事务中的任何地方,这样就可以把较长的事务分成较小的段,这样做的好处是当数据库出现问题是可以不用全部回滚,只需要回滚到保存点即可。

ü  事务只回滚保存点之后的操作;

ü  回滚到某保存点后,它以后的保存点将被删除,但保存点会保留;

ü  保存点之后的锁将被释放,只之前的会被保留。

 

认识锁

         锁出现在数据共享的环境中,它是一种机制,在访问相同资源时,可以防止事务之间的破坏性交互。例如,在多个会话同时操作某表是,优先操作的会话需要对其锁定。

 

排他锁:也叫写锁,这种模式防止资源的共享,用做修改数据。如果有事务T给数据A加上该锁,那么其他事务不能对A加任何锁,所以只允许T对该数据进行读取和修改,直到事务完成该类型的锁的释放为止。

共享锁:也叫读锁,该模式锁下的数据只允许读取,不允许修改。如果有事务T给数据A加上共享锁,其他事务不能对A加排他锁,只能加共享锁。加了该锁的数据可以并发的读取数据。

在执行DML操作时,数据库会先申请共享锁,防止其他会话对其进行DDL操作,一旦申请成功,则会话申请排他锁,如果此时其他会话正在修改其记录,那么等待其事务结束后再为修改的记录加上排他锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值