use*_*660 5 sql-server locking transactions isolation-level
SQL Server是否允许事务修改另一个事务当前正在修改但尚未提交的数据?在任何隔离级别下都可以做到这一点,比如说“读未提交”,因为这是限制性最低的吗?还是完全阻止了这种情况的发生?如果可能的话,您会称之为“脏写”吗?
任何提供事务和事务原子性的RDBMS都不允许脏写。
SQL Server 必须确保可以回滚所有写操作。即使对于单个语句也是如此,因为即使单个语句也可能导致大量写操作并运行数小时。
想象写了一行,但是需要回滚。但是与此同时,对已提交的行进行了另一次写操作。现在我们无法回滚,因为这将违反为另一个事务提供的持久性保证:写入将丢失。(如果要回滚的行是其若干写入行之一,则这也可能违反为该其他事务提供的原子性保证)。
唯一的解决方案是始终使用X锁来稳定写入但未提交的数据。
SQL Server永远不允许脏写或丢失写。
| 归档时间: |
|
| 查看次数: |
4451 次 |
| 最近记录: |