sql排它锁
A. 当你在更新某条数据时,怎么用sql语句锁定而不让别人同时更新 请知道的说下。 谢谢了
你更新的时候,你更新的数据上本身就加了排他锁的,在你更新的这段时间其他人无法再修改数据。或者还有别的操作后再释放这些数据的话可以用事务。
B. 什么是数据库锁Oracle中都有哪些类型的锁
【答案】: 锁是用来在多个用户同时访问同一个表的时候保护数信闹据的。它是Oracle的一种并发控制技术。锁使数据库最大并发的情况下保证数据的完整性。Oracle会在需要的时候自动的提供锁的功能。
锁的种类有:共享锁:这个锁是数据在被viewed的时候放置滑虚罩的;排他锁:这种锁在Insert,Update,Delete命令执行的时候放置的,每誉尘一条记录同一时间只能有一个排他锁。
C. 怎样写sql语句可以加上行级排它锁
看你需要加哪种类型的锁:
HOLDLOCK 将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。HOLDLOCK 等同于 SERIALIZABLE。
NOLOCK 不要发出共享锁,并且不要提供排它锁。当此选项生效时,可能会读取未提交的事务或一组在读取中间回滚的页面。有可能发生脏读。仅应用于 SELECT 语句。
PAGLOCK 在通常使用单个表锁的地方采用页锁。
READCOMMITTED 用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上操作。
READPAST 跳过锁定行。此选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是阻塞该事务,使其等待其它事务释放在这些行上的锁。 READPAST 锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。仅适用于 SELECT 语句。
READUNCOMMITTED 等同于 NOLOCK。
REPEATABLEREAD 用与运行在可重复读隔离级别的事务相同的锁语义执行扫描。
ROWLOCK 使用行级锁,而不使用粒度更粗的页级锁和表级锁。
SERIALIZABLE 用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于 HOLDLOCK。
TABLOCK 使用表锁代替粒度更细的行级锁或页级锁。在语句结束前,SQL Server 一直持有该锁。但是,如果同时指定 HOLDLOCK,那么在事务结束之前,锁将被一直持有。
TABLOCKX 使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。
UPDLOCK 读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。
XLOCK 使用排它锁并一直保持到由语句处理的所有数据上的事务结束时。可以使用 PAGLOCK 或 TABLOCK 指定该锁,这种情况下排它锁适用于适当级别的粒度。
D. SQL SERVER 2000新建立数据库,系统总是说“未能取得MODEL的排他锁,请稍后在试“
在查询分析器中运行如下代码即可:
use master
declare @sql varchar(100)
while 1=1
begin
select top 1 @sql = 'kill '+cast(spid as varchar(3))
from master..sysprocesses
where spid > 50 and spid <> @@spid
if @@rowcount = 0
break
exec(@sql)
end
原因分析:
死锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就可能会产生死锁,这些永远在互相等待的进程称为死锁线程。简单的说,进程A等待进程B释放他的资源,B又等待A释放他的资源,这样互相等待就形成死锁。
E. 数据库中意向排他锁IX和IX是否相容 为什么 请说明
一. 为什么要引入锁
多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:
丢失更新
A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统
脏读
A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致
不可重复读
A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致
并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致
二 锁的分类
锁的类别有两种分法:
1. 从数据库系统的角度来看:分为独占锁(即排它锁),共享锁和更新锁
MS-SQL Server 使用以下资源锁模式。
F. 数据库中什么是S锁什么是X锁它们区别是什么
基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁
若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A.
G. 急急急急急!过两天就要考试了,高手看到请赶紧解答下,关于数据库的共享锁和排他锁的问题。
这是个同一事务对同一数据对角加锁、解锁问题。
第一个问题完全可以,解释有点麻烦,你可以在你要考试的那本书中的两段锁协议那节看到这样的例子。
第二个问题符合封锁两种类型的要求,可以这样加锁。但是会带来数据不一致性的问题,看你加锁对数据的操作了。数据不一致性的问题举个例子:T2加S 锁后读A数据为100,但之后T1事务在X后修改A=200,T2再次读时A就为200。出现不可重复读的问题。其实对于第二个问题不管是解S锁还是不解都会出现不可重复读问题,你也可不考虑。所以就没有TI必须对自己加在A上的s锁进行解锁后才能继续加上X锁这说。没有必要!!!