MSSQL为何会锁定表?(mssql为什么会锁表)

SQL Server会在查询时候自动的锁定表,来减少多线程或多语句更新(即事务)间的冲突发生。当SQL Server收到用户的查询请求时,会先获取一系列锁,这些锁会保护被使用的表或者行,从而保证事务执行过程中,受影响的数据库中的数据不会被其他事务所破坏,保持数据的一致性和完整性。

MSSQL数据库系统支持对表做更新时,采取的访问控制方式,就是加锁。我们常说的表锁,一般来说分成共享锁和排它锁;共享锁容许另一事务交读表的内容,这样可以使多个事务可以同时读取表中的数据;排它锁,则会限制其他会话的访问,即一次只能一个事务对表进行操作。

“`sql

BEGIN TRANSACTION

SELECT * FROM table_name WITH (UPDLOCK, HOLDLOCK)

UPDATE table_name SET value_column=value

COMMIT TRANSACTION


在上面提到的SQL语句中,SELECT语句会持有UPDLOCK,HOLDLOCK两种模式的表锁,这两种表锁可以保证别的事务在本事务提交之前,没有办法访问被UPDLOCK,HOLDLOCK锁定的表。例如,当一个事务更新某条记录时,将UPDLOCK和HOLDLOCK的参数加入到SELECT语句中,这时候,SQL服务器便会针对要更新的表进行UPDLOCK和HOLDLOCK两种模式的表锁,使另一个事务拿不到表的锁,从而保证数据库资源在本事务提交之前不被其他事务访问,以防止在本事务完成之前,出现更新或者插入错误的记录。

看来,SQL Server会锁定表,就是为了保证多线程(事务)之间更新时发生数据库冲突,从而保持数据的一致性和完整性。

数据运维技术 » MSSQL为何会锁定表?(mssql为什么会锁表)