Sql server 隔离级别和锁之间的关系

Sql server 隔离级别和锁之间的关系,sql-server,transactions,Sql Server,Transactions,我试图理解隔离级别()和锁()之间的关系。我在这里读到一个类似的问题,回答者说 “锁是实现详细信息。如果您有一个包含SELECT的事务: SELECT * FROM SomeTable 您只需担心您将从某个表中看到哪些数据” 然而,如果我们不必担心它们,那么为什么我们有:表提示()。我们必须考虑锁吗?嗯,锁在一定程度上是一个实现细节。它们(在SQL Server中)用于根据标准为您提供隔离级别所提供的保证。例如,SERIALIZABLE提供了对数据库的单线程访问。这是通过S锁定所有已读取的数据

我试图理解隔离级别()和锁()之间的关系。我在这里读到一个类似的问题,回答者说

“锁是实现详细信息。如果您有一个包含SELECT的事务:

SELECT * FROM SomeTable
您只需担心您将从某个表中看到哪些数据”


然而,如果我们不必担心它们,那么为什么我们有:表提示()。我们必须考虑锁吗?

嗯,锁在一定程度上是一个实现细节。它们(在SQL Server中)用于根据标准为您提供隔离级别所提供的保证。例如,
SERIALIZABLE
提供了对数据库的单线程访问。这是通过S锁定所有已读取的数据以冻结数据来实现的


锁不仅仅是一个细节,因为锁方案的细节泄露了。它们是可检测的。此外,您还可以使用提示来控制锁,以创建标准中未指定的行为。通常,这样做是为了获得比以前更有力的保证。

作为一名开发人员,您大多数时候都不会真正考虑锁,这公平吗?您只会专注于为需求选择正确的隔离级别?有些隔离级别非常直观。有些则不然。尽可能高层次地思考。因此,是的,隔离级别在大多数情况下都是正确的级别。;我喜欢识别模式。例如,只读事务在快照时总是最好的。低容量事务通常最好留在可序列化状态,这样您就不必考虑正确性。;并发正确性不是全部或全无。会计系统比博客更需要思考。有时,您可以忽略并发性,而不关心非常小的数据损坏概率。当你说高级和低级时,你指的是系统的类型,例如会计系统,还是要求的类型,例如会计系统中的簿记。我指的是并发策略。例如,创建只读trans SNAPSHOT的策略是一种非常高级的方法,可以使此类事务100%安全,并消除100%的潜在阻塞问题。然而,应用UPDLOCK提示是一种非常低级的技术,很少是一个好的选择。;这个建议不是关于正确性,而是关于节省开发时间和减少bug。最后,是每个隔离类型的默认锁类型。我找不到它。我相信我知道每种类型的默认值,但是如果能看到它是黑白的,那就好了。