Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 创建数据库 » 确保数据完整性 » 实施实体完整性和参照完整性

 

参照完整性检查

对于定义为 RESTRICT 操作的外键,如果其破坏了参照完整性,则将在执行语句时进行缺省检查动作。如果指定了 CHECK ON COMMIT 子句,则只会在提交事务时进行该检查操作。

使用数据库选项控制检查时间

对于定义为 RESTRICT 操作的外键,如果其破坏了参照完整性,设置 wait_for_commit 数据库选项可以控制该行为。CHECK ON COMMIT 子句可以替换此选项。

将 wait_for_commit 设置为 Off(缺省设置),将不允许执行会导致数据库不一致的操作。例如,尝试删除仍具有雇员的部门将会失败。以下语句将出错:

DELETE FROM Departments
WHERE DepartmentID = 200;

把 wait_for_commit 设置为 On 将导致执行提交之前不对参照完整性进行检查。如果数据库处于不一致状态,将不允许执行提交操作,并报告一个错误。在此模式下,虽然数据库用户可以删除仍含有雇员的部门,但在执行以下操作之前该用户不能将更改提交到数据库:

  • 删除或重新分配属于该部门的雇员。

  • 将 DepartmentID 行插回到 Departments 表中。

  • 回退事务,撤消 DELETE 操作。


执行 INSERT 时检查完整性
执行 DELETE 或 UPDATE 时检查完整性