sql server 2008学习12 事务和锁

事务

事务的点:

1.begin tran

是事务开始的地方,也是 事务回滚的起点.也就说他会忽略这个起点之后的最终没有提交的所有语句,

2.commit tran

事务的提交 是一个事务的终点

当发出 commit tran命令时,可以认为 该事务是 持久的.

撤销已完成事务的唯一方法 是 发出一个新的事务.从功能上而言,该事务 是对第一个事务的反转.

3.rollback tran

事务回滚到 begin执行之前的状态. 不过也有例外,也可以 使用  保存点.

4.save tran

保存事务从本质上说就是创建书签. 为书签起个名字,就是在回滚中 引用它.

创建书签的好处就是  可以 回滚到代码中的特定位置.

注意: rollback之后会清楚所有的保存点..

事务全部是关于原子性的.

sql server 的日志工作方式:

在数据库的正常操作中,大多数执行的活动都是 “记录”在 事务日志上,而非直接写入数据库中.

检查点 是指 强制把数据库现在所使用的脏页 写入磁盘的周期性操作

脏页 一些在读入到缓存后 已经被修改,但是所进行的修改还没有写入到磁盘的日志或数据页.

写入日志的过程

image

 

锁和并发:

SQL Server锁类型(SQL)收藏
1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。
2. NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。
3. PAGLOCK:指定添加页锁(否则通常可能添加表锁)。
4. READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上操作。。
5. READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁,READPAST仅仅应用于READ COMMITTED隔离性级别下事务操作中的SELECT语句操作。
6. READUNCOMMITTED:等同于NOLOCK。
7. REPEATABLEREAD:设置事务为可重复读隔离性级别。
8. ROWLOCK:使用行级锁,而不使用粒度更粗的页级锁和表级锁。
9. SERIALIZABLE:用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于 HOLDLOCK。
10. TABLOCK:指定使用表级锁,而不是使用行级或页面级的锁,SQL Server在该语句执行完后释放这个锁,而如果同时指定了HOLDLOCK,该锁一直保持到这个事务结束。
11. TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。
12. UPDLOCK :指定在读表中数据时设置更新 锁(update lock)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且保证在后来再更新数据时,这一段时间内这些数据没有被其他用户修改。

锁  是 一种防止在某对象执行动作的一个进程 于已在该对象上执行的其他进程 相冲突的机制.

通过锁可以防止的问题:

  • 脏读
  • 非重复性读取
  • 幻读
  • 丢失更新

 

1.脏读

如果一个事务读取的记录 是另一个未完成事务的一部分,那么这时 就发生了脏读.

如果第一个事务正常完成,那么就没问题.如果回滚的话,那将从数据库看来从未发生的事务中获取信息.

2.非重复性读取

如果一个事务中两次读取记录,而另一个事务在这期间改变了数据,就会发生 非重复性读取.

3.幻读

就update数据的同时有人执行insert语句.

4.丢失更新

同时又两个事务,都在更新一条数据,

其中一个更新数据完毕退出了.这是 另一个事务才开始更新此条数据,那么就导致 第一个事务做的更新 丢失了.

 

可以锁定的资源:

  • 数据库
  • 表,锁定整个表,包括 实际的数据行,以及与表相关联的所有索引中的键.
  • 区段
  • 页: 该页上的数据或索引键
  • 键:在索引中的特定键或一系列的键. 相同索引页的其他键不受影响.
  • 行或RID

 

锁定模式

  1. 共享锁: 这是最基本的一种锁.可以防止用户执行脏读.
  2. 排他锁:不与其他任何锁兼容, 这可以防止两个人同时 更新,删除 或执行任何操作.
  3. 更新锁:是一种特殊的占位符.  考虑一下: 为了执行 update,需要验证where子句来指出想要更新的具体行,这需要一个共享锁,

            ,直到真正进行物理更新的时候,需要一个排它锁.

    这说明,更新操作 有一下两个不同的阶段:

    1)指出满足where子句条件的内容,该查询有个 共享锁

     2)决定执行更新,那么锁 升级为 排它锁..否则,将锁转换为 共享锁.

  如果没有更新锁,死锁就会一直出现.两个更新查询会在 共享模式下运行.

a完成了它的查询工作,并准备进行物理更新.它想升级为排它锁.他是不可以这么做,因为b正在完成查询.除非b需要进行物理更新,否则它会完成查询. 为了做到这点,b必须升级为排它锁,但是不能这么做,因为a正在等待.

    4.意向锁

    是真正的占位符,它用来处理对象层次问题.

假设一下,已对某一行建立了锁,但是有人想在页上或区上 建立锁,那么您肯定不愿意.

如果没有意向锁,那么较高层次的对象将不会知道较低层次上有锁.意向锁可改进性能,因为sql server 只需要在表层上检查意向锁,以此来决定事务 是否可以 安全地 锁定整个表.

意向锁分为以下三种类型:

  1. 意向共享锁:该意向锁指  已经或者将要在层次结构的一些较低点处建立共享锁.
  2. 意向排他锁:
  3. 共享意向排它锁:它指已经或将会在 对象层次结构下面建立共享锁,但目的是为了修改数据.会在某个时刻称为排它锁.

  

5.模式锁

分为以下两种:

  1. 模式修改锁(Sch-M): 对对象进行模式改变, 在 模式修改锁 之间,不能对 对象进行查询或其他操作.
  2. 模式稳定性锁定(Sch-S):与共享锁类似, 这个锁唯一目的就是 防止Sch-M.

  6.批量更新锁(BU)

允许并行加载数据.

 

设置隔离级别:

使用 set transaction isolation level 级别

1.read committed

通过 read committed , 任何创建的共享锁 将在创建它们的语句完成后 自动释放.

 

2.read uncommitted

是所有隔离级别选择中最危险的.但是他在速度方面有最好的性能.

设置 该级别,将告诉sql server 不要设置任何锁,也不要实现任何锁.

3.pepeatable read

会稍微地 将隔离级别升级,并提供一个额外的并发保护层.不仅能防止脏读,而且可以防止非重复性读取.

4.serializable

该锁 是堡垒级 的隔离级别. 除了丢失更新意外,它防止所有形式的并发问题.甚至能防止幻读.

4.snapshot

是最新的一种隔离级别. 只有为 数据库打开 allow_snapshot_isolation ,  该级别才可用.

转载于:https://www.cnblogs.com/Mr-Joe/archive/2012/05/10/2494627.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫画:什么是时间复杂度?

时间复杂度的意义 究竟什么是时间复杂度呢?让我们来想象一个场景:某一天,小灰和大黄同时加入了一个公司...... 一天过后,小灰和大黄各自交付了代码,两端代码实现的功能都差不多。大黄的代码运行一次要花100毫秒&#x…

NLP 最新进展

参考文献: •http://www.dataguru.cn/article-14237-1.html •https://zhuanlan.zhihu.com/p/46652512 •https://github.com/google-research/bert •https://allennlp.org/elmo •https://arxiv.org/pdf/1802.05365 •https://arxiv.org/abs/1810.04805

Big GAN

参考文献: •https://github.com/kayamin/DR-GAN •https://www.jianshu.com/p/4ee8f9284b81 •http://cvlab.cse.msu.edu/pdfs/Tran_Yin_Liu_CVPR2017.pdf •https://arxiv.org/abs/1809.11096 •https://juejin.im/entry/5c05e76c51882539c60cf2d5 •https:…

什么样的知识,值得我们终生学习

#什么样的知识,值得我们终生学习? 原文:https://dwz.cn/vylyXXJi 一、引言 可能你从初中就开始抱怨:我学相似三角形能干什么?阿伏伽德罗常数有什么用?我一不跳楼,二不高空抛物,学自由…

美团面试题:Hashmap的结构,1.7和1.8有哪些区别,深入的分析

(一) 真实面试题之:Hashmap的结构,1.7和1.8有哪些区别 不同点: (1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1…

大数据技术之 Kafka (第 3 章 Kafka 架构深入 ) Kafka 消费者

3.3.1 消费方式 consumer 采用 pull(拉)模式从 broker 中读取数据。 push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。 它的目标是尽可能以最快速度传递消息,但是这样很…

大数据技术之kafka (第 3 章 Kafka 架构深入 ) offset讲解

新版的 Kafka 使用一个选举出来的 controller 来监听 zookeeper,其他 node 再去和 controller 通信,这么做的目的是为了减少 zookeeper 的压力。bootstrap-servers 会自动发现其他 broker,这也是 bootstrap 的含义 前面我们讲到了消费者&…

大数据技术之kafka (第 3 章 Kafka 架构深入 ) 消费者组案例

1)需求:测试同一个消费者组中的消费者,同一时刻只能有一个消费者消费。 2)案例实操 (1)在 backupo01、backupo02 上修改/usr/local/hadoop/kafka/kafka_2.12-2.4.1/config/consumer.properties 配置 文件…

大数据技术之kafka (第 3 章 Kafka 架构深入 ) 高效读写数据

1)顺序写磁盘 Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端, 为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s,而随机写只有 100K/s。这 与磁盘的机…

大数据技术之kafka (第 3 章 Kafka 架构深入) Zookeeper 在 Kafka 中的作用

Kafka 集群中有一个 broker 会被选举为 Controller,负责管理集群 broker 的上下线,所有 topic 的分区副本分配和 leader 选举等工作。 Controller 的管理工作都是依赖于 Zookeeper 的。 以下为 partition 的 leader 选举过程: Leader选举流…

LinkedList源码阅分析

LinkedList里面涉及到的一些操作,非常细致,以避免出现的空指针,理解后对于其优点与确定会有一个更加整体的认识吧。 继承关系图(对比ArrayList) 元素的存储结构 在LinkedList中,每一个元素都是Node存储,Node拥有一个存…

取消选中目标CALL

事先在游戏里选中一个怪物bp send,回到游戏里,按ESC,OD断下来,复制 返回到 elementc.072AFDD8 005869B2 返回到 elementc.005869B2 来自 elementc.0058E8A0072AFDEC 00588B1F 返回到 elementc.00588B1F 来自 elementc.00586980072AFE28 005A7346 返回到 el…

《深入理解java虚拟机》第1章 走近Java

1.6实战:自己编译JDK 想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译- -套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理,虽然门槛会高一点,但肯定会比阅读各种书籍、文章更加贴近本质。另外,JDK中的很多底层…

《深入理解java虚拟机》第2章 Java内存区域与内存溢出异常

Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 2.1 概述 https://blog.csdn.net/q5706503/article/details/84640762 对于从事C、C程序开发的开发人员来说,在内存管理领域&#…

线性表的定义和基本运算之线性结构

一、线性表的逻辑定义和性质 线性表是最简单和最常用的一种数据结构,他是由n个数据元素(结点)a1,a2,a3,a4........an组成的有限序列。其中,数据元素个数那位表的长度。当n为0时称为空表,非空的线性表通常记为 &#x…

数据结构之指针复习

废话不多说&#xff0c;拿起键盘就是干&#xff0c;直接上代码&#xff1a; #include <stdio.h>int main() {double *p;double x 66.6;p &x; //x占8个字节&#xff0c;一个字节占8位&#xff0c;一个字节一个地址double arr[3] { 1.1,2.2,3.3 };double *q;q &a…

数据结构之结构体复习

为什么出现结构体&#xff1f; 为了表示一些复杂的数据&#xff0c;一些基本数据类型无法满足要求&#xff0c; 当要用一个变量描述一个对象的多个属性时&#xff0c;普通的内置数据类型是表示不了的&#xff0c;这个时候就可以用结构体回。结构体和类很相似&#xff0c;唯一不…

高效管理读书笔记

高效管理读书笔记一、优秀的权威宣言二、主要的内容要点2.1 有权威的领导都会关心自己的员工2.2 问责而不指责2.3 多点尤达&#xff0c;少点超人三、原书一、优秀的权威宣言 优秀的权威就是&#xff1a; 指出大部分人视而不见的问题的气质今天畅所欲言而不是空等明天的好心【…

蒙特卡罗方法介绍(一)

蒙特卡罗方法介绍(一) 一、蒙特卡罗方法的基本思想和解题步骤 1.1 蒙特卡罗方法的基本思想 蒙特卡罗方法也称随机模拟法、随机抽样技术或统计实验发&#xff0c;其基本思想是&#xff1a;为了求解数学、物理、工程技术或生产管理等方面的问题。首先&#xff0c;建立一个与求…

神策数据张涛:如何让用户标签价值落地?

本文根据神策数据副总裁张涛在《用户个性化运营—标签体系搭建新机遇》主题沙龙中演讲整理所得。 标签系统&#xff0c;在企业中已不是什么“高大上”的说辞。然而让用户标签价值真正落地企业不多&#xff0c;就像“青少年谈性”&#xff0c; 有一段话形容得再贴切不过&#xf…