南大通用GBase8s 常用SQL语句(239)

过滤模式
处于过滤模式的约束或唯一索引可在 DML 操作期间将任何不符合该约束或索引的任何行插入到相关的违反表内。此模式还支持 WITH ERROR 和 WITHOUT ERROR 选项,为了处理来自 INSERT、DELETE、MERGE 和 UPDATE 语句的引用完整性违反。
当约束或唯一索引处于 FILTERING WITH ERROR 模式时,在 INSERT、DELETE、MERGE 或 UPDATE 语句导致一个或多个行不符合唯一索引或约束之后,数据库服务器返回引用完整性违反错误消息。
在缺省情况下,不带有错误选项的 FILTERING 关键字指定 FILTERING WITHOUT ERROR 对象模式。
当约束或唯一索引处于 FILTERING WITHOUT ERROR 模式时,INSERT、DELETE、MERGE 或 UPDATE 语句成功,但数据库服务器通过将任何失败的行写到与目标表相关联的违反表,来强制该索引或唯一索引要求。将关于约束违反或唯一索引违反的诊断信息写到与目标表相关联的诊断表。
在数据操纵操作中,过滤模式对 INSERT、UPDATE 和 DELETE 语句有下列特定的作用:
在 INSERT 语句期间的约束违反会导致数据库服务器制成不符合的记录的拷贝,并将它写到违反表。数据库服务器不将不符合的记录写到目标表。
如果 INSERT 语句不是单 INSERT,则以下一记录继续剩余的插入操作。
在 UPDATE 语句期间的约束违反或唯一索引违反会导致数据库服务器制作要被更新的现有记录的拷贝,并将它写到违反表。数据库服务器还制作新记录的拷贝,并将它写到违反表,但在目标表中不更新实际的记录。如果该 UPDATE 语句不是单 update,则以下一记录继续剩余的更新操作。
在 DELETE 语句期间的约束违反或唯一索引违反会导致数据库服务器制作要被删除的记录的拷贝,并将它写到违反表。数据库服务器在目标表中不删除实际的记录。如果该 DELETE 语句不是单 delete,则以下一记录继续剩余的删除操作。
在 MERGE 语句中,分别按照以上所述来处理组件 INSERT、DELETE 或 UPDATE 操作。
在所有这些情况下,数据库服务器将关于每一约束违反或唯一索引违反的诊断信息发送到与目标表相关联的诊断表。
要获取关于数据库服务器写到违反表和诊断表的记录的结构信息,请参阅 违反表的结构 和 诊断表的结构。
外键约束的 FILTERING NOVALIDATE 模式
在 SET Database Object Mode 语句正在将外键约束的模式更改为 FILTERING WITHOUT ERROR 或 FILTERING WITH ERROR 时,数据库服务器通过检测受约束的表中的每一行验证该约束,来确保带有相应的值的行在被引用的表的主键列中存在。此验证可需要大量时间和资源。在 SET Database Object 模式操作期间您可替代地绕过对违反行的搜索,通过包括 NOVALIDATE 关键字来将外键约束模式更改为 FILTERING WITHOUT ERROR NOVALIDATE 或 FILTERING WITH ERROR NOVALIDATE。对于大型表,指定 ENABLED NOVALIDATE 可显著地减少将外键约束的模式更改为过滤模式所需的时间。
在 SET Database Object Mode 语句成功地启用外键约束之后,
在 sysobjstate 系统目录表中,该约束被注册为 FILTERING WITHOUT ERROR 模式(F)或 FILTERING WITH ERROR 模式(G),
但 NOVALIDATE 关键字没有编码且无后续的影响。
在后续的 DML 操作期间,数据库服务器将外键约束强制作为指定的 SET CONSTRAINTS 语句,带有或不带有完整性违反错误,来维护数据库的引用的完整性。
启动和停止违反表和诊断表
您必须为在其上定义数据库对象的目标表使用 START VIOLATIONS TABLE 语句来启动违反表和诊断表,或在您将定义的任何数据库对象设置为过滤模式之前,或在您将数据库对象设置为过滤之后,但要在任何用户发出 INSERT、DELETE 或 UPDATE 语句之前。
如果您想要停止数据库服务器将坏记录过滤到违反表并将每一坏记录的诊断信息发送到诊断表,则必须发出 STOP VIOLATIONS TABLE 语句。
要获取关于这些语句的进一步信息,请参阅 START VIOLATIONS TABLE 语句 和 STOP VIOLATIONS TABLE 语句。
过滤模式的错误选项
当您将约束或唯一索引的模式设置为过滤时,您必须指定两个错误选项之一。在数据操纵语句执行期间,当遇到坏记录时,这些错误选项控制数据库服务器是否显示完整性违反错误消息:
在执行 INSERT、DELETE 或 UPDATE 语句之后,其中一个或多个目标行导致约束违反或唯一约束违反,WITH ERROR 选项指导数据库服务器返回引用的完整性违反错误消息。
WITHOUT ERROR 选项是缺省的。在 INSERT、DELETE 或 UPDATE 语句导致约束违反或唯一索引违反之后,此选项阻止数据库服务器向用户发出引用的完整性违反错误消息。
过滤模式对数据库的影响
过滤模式的净影响就是目标表的内容总是满足表上的所有约束以及表上的任何唯一索引要求。
此外,数据库服务器不丢失违反约束或唯一索引要求的任何数据值,因为将不符合的记录发送到违反表,并将关于那些记录的诊断信息发送到诊断表。
而且,当过滤模式生效时,当数据库服务器遇到坏记录时,对目标表的插入、删除和更新操作不会失败。这些操作成功地将所有好记录添加到目标表。因此,过滤模式适合于表的大规模批量更新。用户可在该情况发生之后,修理违反约束和唯一索引要求的那些记录。在批量更新之前,用户不需要修理坏记录,以避免在批量更新期间丢失坏记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值