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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » 数据完整性 » 实体和参照完整性

 

参照完整性动作

在更新或删除被引用的主键时保持参照完整性的操作非常简单,只需拒绝进行更新或删除。但常常也可以对每个外键执行具体的操作来保持参照完整性。数据库管理员和表的所有者可以使用 CREATE TABLE 和 ALTER TABLE 语句指定,在完整性被破坏时,对引用被修改的主键的外键执行哪些操作。

注意

参照完整性操作由 physical 而非 logical 触发,可更新到唯一值。例如,即便在一个区分大小写的数据库中,将主键值从 SAMPLE-VALUE 更新为 sample-value 也将触发参照完整性操作,即使这两个值具有相同的逻辑。

可以为更新和删除主键的情况分别指定以下各个参照完整性操作:

  • RESTRICT   生成一条错误消息,并在尝试变更被引用的主键值时,拒绝进行修改。这是缺省的参照完整性操作。

  • SET NULL   将所有参照被修改的主键的外键设置为 NULL。

  • SET DEFAULT   将所有引用被修改的主键的外键设置为该列的缺省值(在表定义中指定的缺省值)。

  • CASCADE   与 ON UPDATE 一起使用时,此动作将所有引用已更新主键的外键更新为新值。与 ON DELETE 一起使用时,此动作将删除所有包含引用已删除主键的外键的行。

参照完整性动作由系统触发器执行。该触发器在主表上定义,但使用辅助表的所有者权限执行。这一行为意味着可以在所有者不同的表之间进行级联操作,而无需获得额外权限。