select添共享锁,insert、update、delete加排他锁,事物加锁的sql语句
select加共享锁,insert、update、delete加排他锁,事物加锁的sql语句
谁能帮我写下select加共享锁示例?
insert、update、delete加排他锁示例?
事物加锁示例?
------解决方案--------------------
共享锁默认的,不用加。update的:
USE AdventureWorks2008R2;
GO
UPDATE Production.Product
WITH (TABLOCK)
SET ListPrice = ListPrice * 1.10
WHERE ProductNumber LIKE 'BK-%';
GO
其他你自己改吧。
------解决方案--------------------
共享锁,也就是S锁:
select * from 表 或者
select * from 表 where 字段= 值
这个在运行时,都会自动加锁,具体根据需要访问的对象,加上S锁,比如记录会加上S锁。
------解决方案--------------------
------解决方案--------------------
http://www.cnblogs.com/sunshch/archive/2013/04/18/3027703.html#2832771
推荐一个连接,看看能明白不。
谁能帮我写下select加共享锁示例?
insert、update、delete加排他锁示例?
事物加锁示例?
------解决方案--------------------
共享锁默认的,不用加。update的:
USE AdventureWorks2008R2;
GO
UPDATE Production.Product
WITH (TABLOCK)
SET ListPrice = ListPrice * 1.10
WHERE ProductNumber LIKE 'BK-%';
GO
其他你自己改吧。
------解决方案--------------------
共享锁,也就是S锁:
select * from 表 或者
select * from 表 where 字段= 值
这个在运行时,都会自动加锁,具体根据需要访问的对象,加上S锁,比如记录会加上S锁。
------解决方案--------------------
下面演示一个读-写冲突引发死锁并解决问题的过程,你参考参考!
查询1中的语句
create database mydb
go
use mydb
go
create table tb1
(name1 char(4))
insert into tb1 values('tom')
begin tran
update tb1 set name1='aa' --此时数据库会对表tb1加上排它锁,也就是x锁
现在在查询1中查询表2的内容
select * from tb2 --查询有会才出来,因为该表更新操作正在进行,事务没有结束,不允许读,错误消息如下:
消息 1205,级别 13,状态 56,第 1 行
事务(进程 ID 53)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
--在查询1中提交事务后,tb2上的x锁立即释放,即可查询tb2内容
select * from tb2
--结果为
/* bb */
--查询2中的语句
use mydb
go
create table tb2
(name2 char(4) )
insert into tb2 values('sam')
begin tran
update tb2 set name2='bb' ----此时数据库会对表tb2加上排它锁,也就是x锁
--同时又在查询2中读取tb1中的信息
select * from tb1 -- 查询结果也会很久才出来,但最后成功了,因为两个事务都在更新表,系统会把消耗较小的一个事务锁定的资源释放出来,从而tb1上的x锁释放,即可查询出结果
查询结果:
/* tom */
--再在此处执行提交事务命令
commit
------解决方案--------------------
http://www.cnblogs.com/sunshch/archive/2013/04/18/3027703.html#2832771
推荐一个连接,看看能明白不。