admin

只要尚未提交,SQL Server是否在事务中允许违反约束的行为?

sql

只要事务尚未提交,SQL Server是否允许事务中的约束违反(即延迟约束)?

我有一个正在运行的,未提交的事务,并且在该事务正在运行时,我将更改我的数据,使其违反某些约束(例如,具有重复的主键)。当我提交事务时,数据将处于一致的有效状态。在SQL中,特别是在MS
SQL Server中,通常是否允许这样做?


阅读 176

收藏
2021-05-10

共1个答案

admin

不,对不起 SQL Server不允许事务中的延迟约束。它在SQL Server 6.5中存在,但在SQL Server 2000中已删除:

SET DISABLE_DEF_CNST_CHK ON

每个单独的语句都必须是一致的,等等,无论它是否在事务中

某些RDBMS确实允许这样做(例如Oracle,Postgres,Interbase)

连接

2006年创建了一个Microsoft
Connect请求
,要求该功能:

推迟外键约束检查直到事务提交的选项

在各种“鸡与蛋”场景中,希望将对参照完整性约束的检查推迟到事务的提交时间之前。

允许推迟引用完整性约束检查,直到在事务上提交时间为止(作为选择)。建议在BEGIN TRANSACTION上提供一个选项来指定此选项。

微软的最后回应是十年前:

由Sameer [MSFT]发表于2006年10月13日,下午1:35

你好格雷格,

感谢您的反馈。我们已经意识到了这一点,并希望将其发布。

Sameer Verkhedkar
SQL引擎
[MSFT]

微软所说的 “走开”

SQL-92定义它

该功能是在19927月使用SQL-92定义的。示例语法为:

BEGIN TRANSACTION
   SET CONSTRAINTS ALL DEFERRED --applies only to the current transaction

   INSERT Customers ...
   INSERT Orders ...
   UPDATE Customers ... --add the thing we were missing

COMMIT TRANSACTION
2021-05-10