我相信在SQL Server中,每个
例如,我有以下逻辑:
SELECT
语句都会导致共享锁或键锁的放置。但是,在事务中执行时,它是否会放置相同类型的锁?共享锁或键锁是否允许其他进程读取相同的记录?例如,我有以下逻辑:
Begin Trans
-- select data that is needed for the next 2 statements
SELECT * FROM table1 where id = 1000; -- Assuming this returns 10, 20, 30
insert data that was read from the first query
INSERT INTO table2 (a,b,c) VALUES(10, 20, 30);
-- update table 3 with data found in the first query
UPDATE table3
SET d = 10,
e = 20,
f = 30;
COMMIT;
在这种情况下,我的select语句是否仍会创建共享锁或键锁,还是会升级为独占锁?其他事务能否从table1中读取记录,还是所有事务都要等到我的事务提交后才能从中选择?
在应用程序中,将select语句移出事务并只保留插入/更新操作是否有意义?
READ COMMITTED SNAPSHOT
和SNAPSHOT
隔离级别时,SELECT
语句不会请求共享锁。 - Jesús López