我想请教一些与SQL Server锁定机制相关的问题。
如果我在SQL语句中没有使用锁提示,那么SQL Server默认使用PAGELOCK提示。我是对的吗?如果是,为什么?也许这是由于管理太多锁的因素,这是我认为的唯一的缺点,但如果还有其他原因,请告诉我。并且告诉我如果我们可以改变这种默认行为是否合理。
我正在编写一个服务器端应用程序,一个同步服务器(不使用同步框架),我已经在C#代码文件中编写了数据库查询,并使用ODBC连接来执行它们。现在的问题是,考虑到缺点(例如在查询中添加锁提示),什么是将默认锁从Page更改为Row的最佳方法。
如果在没有事务范围的情况下执行SQL查询(SELECT/DML),并且语句包含锁提示,则会获得什么类型的锁(例如共享、更新、独占)?在事务范围内时,事务的隔离级别是否对使用ROWLOCK提示的锁类型产生影响。
最后,如果有人能给我提供示例,这样我就可以自己测试和体验所有上述情况(例如dot net代码或sql脚本)。