• 南大通用GBase8s 常用SQL语句(237)


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

    表格式
    使用表格式来更改已在同一表或视图上定义了的指定的类型的所有数据库对象的模式。
    表格式
    在这里插入图片描述
    元素 描述 限制 语法
    owner table 的所有者 必须拥有 table 所有者名称
    table_object 在其上定义对象的表或视图 必须为本地的表或视图。在临时表上定义的对象不可设置为禁用的或过滤的模式。 标识符
    此示例禁用 cust_subset 表上定义的所有约束:
    SET CONSTRAINTS FOR cust_subset DISABLED;
    在表格式中,您可以单个语句更改多个数据库对象类型的模式。例如,此示例启用在 cust_subset 表上定义的所有约束、索引和触发器:
    SET CONSTRAINTS, INDEXES, TRIGGERS FOR cust_subset ENABLED;
    在 GBase 8s 10.00 以及更早的版本中,您不可使用 SET Database Object Mode 语句的 SET TRIGGERS 选项来选择性地禁用表层级之内的继承的触发器。然而,在此版本中,在层级之内的表上禁用触发器不影响继承的触发器。例如,下列语句禁用在指定的 subtable 上的所有触发器,但该语句不影响在表层级之内在 subtable 之上或之下的表对象上的触发器:
    SET TRIGGERS FOR subtable DISABLED;
    然而,在集群环境中,在可更新的辅助服务器上不支持 SET TRIGGERS、SET INDEXES 和 SET CONSTRAINTS 语句。对于辅助服务器的数据库中表对象上的 UPDATE 操作,SET Database Object Mode 语句指定的会话级索引、触发器和约束模式不会重定向。
    约束和唯一索引的模式
    您可为约束或为唯一索引指定启用的或禁用的模式。对于 START VIOLATIONS TABLE 语句已将违反表与诊断表相关联的表,您还可使用 FILTERING 关键字来为处理不遵守约束或不遵守唯一索引要求的那些行指定 ERROR 模式。
    当您将外键约束的模式更改为 ENABLED 或 FILTERING 时,您可可选地包括 NOVALIDATE 关键字。这会挂起对那些在 SET CONSTRAINTS 语句执行期间违反该约束的行的引用完整性检查。
    这是为了更改在 SET CONSTRAINTS 或 SET INDEXES 语句中的约束或唯一索引的数据库对象模式的语法:
    约束和唯一索引的模式

    用法
    如果您在创建约束的 ALTER TABLE 或 CREATE TABLE 语句中未指定模式,则缺省地启用该约束。
    类似地,如果您在创建索引的 CREATE INDEX 语句中未指定模式,则缺省地启用该索引。
    然而,对于在 SET Database Object Mode 语句中的数据库对象没有缺省的模式。如果您在 SET Database Object Mode 语句的 SET CONSTRAINTS 或 SET INDEXES 选项中未指定模式,则该语句失败并报错 -201,且不更改该约束模式或索引模式。
    WITHOUT ERROR 和 WITH ERROR 过滤选项支持 DML 操作,在其中数据库服务器检测新的或修改了的行是否违反索引或目标表上的唯一索引。在过滤模式中,数据库服务器如何处理不符合的行还依赖于这些因素:
    违反表和诊断表是否与在其上定义该约束或唯一索引的表相关联。
    当前是启用还是禁用到相关联的违反表和诊断表的输入。
    要获取更多信息,请参阅 START VIOLATIONS TABLE 语句 和 STOP VIOLATIONS TABLE 语句。
    更改约束模式和唯一索引模式的示例
    下列语句禁用约束 u100_1,以便它仍然注册在系统目录中,但不起作用:
    SET CONSTRAINTS u100_1 DISABLED;
    如果 u100_1 是启用的唯一索引,而不是约束,则下列语句有类似的作用:
    SET INDEXES u100_1 DISABLED;
    下列语句启用引用的约束 u100_1,而不验证每一行的外键关系:
    SET CONSTRAINTS u100_2 ENABLED NOVALIDATE;
    警告:
    您可将外键约束的新模式指定为 ENABLED NOVALIDATE 或 FILTERING WITH ERROR NOVALIDATE 或 FILTERING WITHOUT ERROR NOVALIDATE。这样可提升加载操作的性能,例如,如果知道数据集会对在外键约束的作用域之内的每行都有相应的主键的话。然而,避免在后续的 DML 操作中发生数据库冲突是用户的职责。如果您不确信数据行是否符合,则
    您应禁用外键约束,
    将数据加载到新的数据库内,
    然后在它的表已成功地加载了之后再启用外键约束,以便于数据库服务器可验证数据的引用完整性。
    当 SET CONSTRAINTS 语句执行完成时,数据库服务器自动地删除 NOVALIDATE 属性。下列语句启用相同的外键约束并恢复该约束的自动验证:
    SET CONSTRAINTS u100_2 ENABLE;
    当您使用 FILTERING WITHOUT ERROR 关键字来定义过滤模式时,后续的那个约束的违反或那个索引的唯一性违反不会导致 INSERT、DELETE、MERGE 或 UPDATE 操作失败,如果有些行违反该约束或该唯一索引的话。在此过滤模式中,DML 语句成功,但数据库服务器通过将不符合的行写到违反表来强制满足该约束或该唯一索引的要求。
    下列语句指导数据库服务器将违反 r104_11 约束的任何行写到违反表,假如违反表与该目标表相关联的话。
    SET CONSTRAINTS r104_11 FILTERING WITHOUT ERROR;
    要获取关于过滤模式的更多信息,请参阅主题 过滤模式。
    下列语句启用在 orders 表上定义的所有约束:
    SET CONSTRAINTS FOR orders DISABLED;
    那个表上的后续的 DML 操作不理会违反 orders 表上的约束的那些行,不在它的违反表或诊断表中创建条目,如果这些表存在的话。然而,如果在 orders 表上存在任何唯一索引,则根据索引的当前模式处理违反唯一性要求的那些行,如罗列在 sysobjstate 系统目录表中的那样。

  • 相关阅读:
    ASP.NET Core 6框架揭秘实例演示[13]:日志的基本编程模式
    网站被插入虚假恶意链接怎么办?
    【力扣】136. 只出现一次的数字
    【ARM Coresight OpenOCD 系列 3 -- OpenOCD 常用命令与扫描链scan_chain】
    数据输出流和数据输入流
    微信视频号下载视频工具3.0,实测有效免费保存!
    SQL 表达式
    牛客编程题--必刷101之动态规划(一文彻底了解动态规划)
    Dapr 的 gRPC组件(又叫可插拔组件)的提案
    C++面试八股文:什么是RAII?
  • 原文地址:https://blog.csdn.net/zyy19990813/article/details/126479207