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 的用法 » 创建数据库 » 确保数据完整性 » 使用表和列约束

 

对列使用 CHECK 约束

使用 CHECK 条件可以确保列中的值满足某个条件或规则。这些规则或条件可能需要用来验证数据是否正确,或者可能需要使用更严格的规则来反映公司的政策和程序。如果某列的有效值限制在一定范围内,则可以单独在该列上使用 CHECK 条件。

CHECK 条件就位后,修改行之前将依据此条件来评估将来值。更新具有检查约束的值时,将检查该值的约束以及该行其它值的约束。

也可以在域中附加 CHECK 约束。请参见从域继承列 CHECK 约束

注意

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

有关有效条件的详细信息,请参见搜索条件

示例 1

可以实施特定的格式要求。例如,如果表中有一列用于存储电话号码,您可能希望确保用户以相同的格式输入电话号码。对于北美洲电话号码,可以使用类似以下约束:

ALTER TABLE Customers
ALTER Phone
CHECK ( Phone LIKE '(___) ___-____' );

CHECK 条件就位后,如果您尝试将 Phone 值设置为 9835,将不允许进行此更改。

示例 2

可以确保输入的值与一组有限数量的值中的一个相匹配。例如,要确保 City 列只包含几个允许城市(例如,公司设有办事处的那些城市)之一,可以使用以下约束:

ALTER TABLE Customers
ALTER City
CHECK ( City IN ( 'city_1', 'city_2', 'city_3' ) );

缺省情况下,比较字符串时不区分大小写,除非创建数据库时显式指定需要区分大小写。

示例 3

可以确保日期或数字在特定的范围内。例如,您可能需要使用以下约束确保雇员的 StartDate 列在公司成立日期和当前日期之间:

ALTER TABLE Employees
ALTER StartDate
CHECK ( StartDate BETWEEN '1983/06/27'
                   AND CURRENT DATE );

有多种日期格式可以使用。不管当前选项如何设置,数据库始终都可以识别本例中使用的 YYYY/MM/DD 格式。