sql-server - SQL Server - 是否有名为 'dirty write' 的东西?

标签 sql-server database transactions locking isolation-level

SQL Server 是否允许一个事务修改当前正在被另一个事务修改但尚未提交的数据?这在任何隔离级别下都可能吗?假设是 READ UNCOMMITTED,因为这是限制最少的?或者它能完全阻止这种情况的发生吗?如果可能的话,您会称其为“脏写”吗?

最佳答案

任何提供事务和事务原子性的 RDBMS 都不允许脏写。

SQL Server必须确保所有写入都可以回滚。这甚至适用于单个语句,因为即使单个语句也可能导致多次写入并运行数小时。

想象一行已写入但需要回滚。但与此同时,已经提交的该行发生了另一次写入。现在我们无法回滚,因为这会违反为其他事务提供的持久性保证:写入将会丢失。 (如果要回滚的行是其写入的几个行之一,它也可能违反为其他事务提供的原子性保证)。

唯一的解决方案是使用 X 锁始终稳定已写入但未提交的数据。

SQL Server 绝不允许脏写或丢失写。

关于sql-server - SQL Server - 是否有名为 'dirty write' 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303092/

相关文章:

sql-server - 如何使用 SQL Server 备份链接服务器?

sql-server - SQL Server 双向事务复制 - 这是一个好的用例吗?

c++ - 在 SQLITE 数据库中写入记录需要花费大量时间。如何提高插入操作的效率?

mysql - ERROR 1005 MySQL Workbench 正向工程

exception-handling - Java EE : @ApplicationException thrown, 仍然回滚事务

sql-server - 如何在 4 个字符之后对 nvarchar 列进行排序?

c# - SSIS 从 http 下载 - 从服务器获取的错误 SSL 证书响应无效

sql - 查询sqlalchemy中的多对多关系

ruby-on-rails - 是否可以让数据库事务跨越 Rails 中的多个请求?

php - 正在执行的 MySql 事务的一部分没有 "commit"