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

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 确保数据完整性 » 使用表和列约束

 

变更和删除 CHECK 约束

变更表可能会影响到数据库的其他用户。虽然可以在其它连接处于活动状态时执行 ALTER TABLE 语句,但如果任何其它连接正在使用要变更的表,则不能执行 ALTER TABLE 语句。对于大型表,ALTER TABLE 操作非常耗时。在处理该语句的过程中,所有其它引用正被变更的表的请求都将被禁止。请参见ALTER TABLE 语句

有几种方法可以改变表中现有的 CHECK 约束集。

  • 您可以给表或某个列添加新 CHECK 约束。

  • 通过将列的 CHECK 约束设置为 NULL,可以删除该约束。例如,以下语句将删除 Customers 表中 Phone 列的 CHECK 约束:

    ALTER TABLE Customers
    ALTER Phone CHECK NULL;
  • 您可以用与添加 CHECK 约束相同的方法来替换列的 CHECK 约束。例如,以下语句将添加或替换 Customers 表中 Phone 列的 CHECK 约束:

    ALTER TABLE Customers
    ALTER Phone
    CHECK ( Phone LIKE '___-___-____' );
  • 您可以变更在表中定义的 CHECK 约束:

    • 您可以使用带有 ADD table-constraint 子句的 ALTER TABLE 添加新的 CHECK 约束。

    • 如果已经定义了约束名,则可以变更各个约束。

    • 如果尚未定义约束名,则可以使用 ALTER TABLE DELETE CHECK 删除所有现有的 CHECK 约束(包括列 CHECK 约束和从域继承的 CHECK 约束),然后添加新的 CHECK 约束。

      使用带有 DELETE CHECK 子句的 ALTER TABLE 语句:

      ALTER TABLE table-name
      DELETE CHECK;

Sybase Central 允许您添加、变更和删除表 CHECK 约束和列 CHECK 约束。有关详细信息,请参见管理约束

从表中删除列并不会删除表约束中保存的与该列相关联的 CHECK 约束。如果不删除这些约束,尝试在该表中插入数据时(甚至在只查询数据时)会出现以下错误消息:[未找到列]。

注意

如果返回 FALSE 值,则表 CHECK 约束失败。如果条件返回 UNKNOWN 值(此行为同返回 TRUE 值一样),则允许使用此值。