学习SQLSerVer中的锁
当数据库的并发访问量很大时,需要对数据库的锁的概念有一个清晰的了解,这样就能很好的处理数据库的大并发访问的问题 1.并发引起的问题 ①脏读:包含未提交数据的读取。例如,事务1更改了某行。事务2 在事务1 提交更改之前读取已更改的行。如果事务1回滚更改,则事务2 便读取了逻辑上从未存在过的行。 ②不可重复读取:当某个事务不止一次读取同一行,并且一个单独的事务在两次(或多次)读取之间修改该行时,因为在同一个事务内的多次读取之间修改了该行,所以每次读取都生成不同值,从而引发不一致问题。 ③幻象:第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。 ??④死锁:开两个查询窗口,分别执行下面两段sql就会引起死锁 ?--Query?1 --Query?2 ? 2.?锁模式 ①共享锁 ②排它锁 ③更新锁 ? 3.事务隔离级别分为: ①?READUNCOMMITTED:可以读未提交的数据,不发出锁 ②?READCOMMITTED:只读已提交的数据,遇到未提交的事务型数据时,则一直等待。发出共享锁,保持到读取结束 ③?REPEATABLEREAD:是指可重复读,它的隔离级别要比ReadCommitted级别高。发出共享锁,保持到事务结束 ④?SERIALIZABLE:锁定查询中使用的所有数据以防止其他用户更新数据。发出共享锁,保持到事务结束 ?事务隔离级别默认为:READCOMMITTED,设定的级别不同,存在的问题如下 ?
|