SQL中的CHECK约束的详细讲解

时间:2024-02-23 06:58:11
CHECK 约束(CHECK 约束:定义列中可接受的数据值。可以将 CHECK 约束应用于多个列,也可以将多个 CHECK 约束应用于单个列。当除去某个表时,也将除去 CHECK 约束。)指定可由表中一列或多列接受的数据值或格式。例如,可以要求 authors 表的 zip 列只允许输入五位数的数字项。
  
  可以为一个表定义许多 CHECK 约束。可以使用"表"属性页创建、修改或删除每个 CHECK 约束。
[attach]402[/attach]

1、将新的 CHECK 约束附加到表或列
  
  将 CHECK 约束附加到表以指定一列或多列中可接受的数据值。
  
  附加新的 CHECK 约束
  
  在数据库关系图中,右击包含约束的表,然后从快捷菜单中选择"约束"命令。
  -或-
  
  为将包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"约束"命令。
  
  选择"新建"命令。"选定的约束"框显示由系统分配的新约束名。系统分配的名称以"CK_"开始,后跟表名。
  
  
  在"约束表达式"框中,为 CHECK 约束键入 SQL 表达式。例如,若要将 authors 表中 state 列的输入项限制为 New York,请键入:
  state = \'NY\'
  或者,若要要求 zip 列中的输入项为 5 位数字,请键入:
  
  zip LIKE \'[0-9][0-9][0-9][0-9][0-9]\' 中间不能有空格
  
  若要给约束提供一个不同的名称,请在"约束名"框中键入名称。
  
  
  用复选框控制何时强制约束:
  若要在创建约束前对现有数据测试约束,请选中"创建中检查现存数据"复选框。
  
  
  若要在该表中发生复制操作时强制约束,请选中"对复制强制约束"复选框。
  
  
  若要在该表中插入或更新行时强制约束,请选中"对 INSERT 和 UPDATE 强制约束"复选框。
  
  2、定义 CHECK 约束表达式
  
  当将 CHECK 约束附加到表或列时,必须包括 SQL 表达式。
  
  可以创建简单的约束表达式在简单条件下检查数据;或使用布尔运算符创建复杂的约束表达式以在多种条件下检查数据。例如,假设 authors 表中有一个 zip 列,该列要求 5 位数字的字符串。下面的示例约束表达式确保只允许 5 位数字:
  
  zip LIKE \'[0-9][0-9][0-9][0-9][0-9]\'
  或者假设 sales 表中有一个名为 qty 的列,该列要求大于 0 的值。下面的示例约束确保只允许正值:
  
  qty > 0
  或者假设 orders 表限制所有信用卡订单可接受的信用卡类型。下面的示例约束确保如果用信用卡发出订单,则只接受 Visa、MasterCard 或 American Express:
  
  NOT (payment_method = \'credit card\') OR
  (card_type IN (\'VISA\', \'MASTERCARD\', \'AMERICAN EXPRESS\'))
  定义约束表达式
  
  创建新的 CHECK 约束。
  
  在属性页的"CHECK 约束"选项卡中,使用下列语法在"约束表达式"框中键入表达式:
  {constant | column_name | function | (subquery)}
  [{operator | AND | OR | NOT}
  {constant | column_name | function | (subquery)}...]
  SQL 语法由下列参数组成:
[attach]403[/attach]

3、修改 CHECK 约束
  当要更改约束表达式,或更改对特定条件启用或禁用约束的选项时,修改 CHECK 约束。
  
  修改 CHECK 约束
  
  I、在数据库关系图中右击包含约束的表,然后从快捷菜单中选择"属性"命令。
  -或-
  
  为包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命令。
  
  II、选择"CHECK 约束"选项卡。
  
  III、从"选定的约束"列表中,选择要更改的约束。
  
  IV、完成下表中的操作:
[attach]404[/attach]

比你帅 2007-12-5 12:31

  当保存表或关系图时,约束即在数据库内被更新。
  
  4、创建 CHECK 约束时检查现有数据
  
  当创建 CHECK 约束时,可以设置选项将约束只应用于新数据或同时也应用于现有数据。当知道现有数据已满足新 CHECK 约束时,或者当业务规则要求仅从这点开始强制约束时,这种使约束仅应用于新数据的选项很有用。
  
  例如,过去可能要求邮政编码必须是五位数字,但现在却需要新数据允许有九位邮政编码。包含五位邮政编码的旧数据将与包含九位邮政编码的新数据共存。
  
  I、创建 CHECK 约束时检查现有数据
  II、选择"CHECK 约束"选项卡。
  III、从"选定的约束"列表中选择约束。
  IV、选择"创建中检查现存数据"复选框。默认情况下选择该选项。
  当保存表或数据库关系图时,将应用 CHECK 约束。如果在保存过程中遇到任何违反约束的行为,则不能保存表。
  
  5、对 INSERT 和 UPDATE 语句禁用 CHECK 约束
  
  当在表中添加、更新或删除数据时,可以禁用 CHECK 约束。禁用约束使您能够执行下列事务:
  
  如果表中的现有行过去必须遵从的特定业务规则已不再适用,则可以向该表添加新的数据行(使用 INSERT 语句)。例如,过去可能要求邮政编码必须是五位数字,但现在却需要新数据允许有九位邮政编码。包含五位邮政编码的旧数据将与包含九位邮政编码的新数据共存。
  
  
  如果表中的现有行过去必须遵从的特定业务规则已不再适用,则可以修改现有行(使用 UPDATE 语句)。例如,可能需要将所有现有的五位邮政编码更新为九位邮政编码。
  如果知道新数据将违反约束,或者约束仅适用于数据库中的已有数据,则选择该选项以在 INSERT 和 UPDATE 事务处理期间禁用 CHECK 约束。
  
  对 INSERT 和 UPDATE 语句禁用 CHECK 约束
  I、在数据库关系图中右击包含约束的表,然后从快捷菜单中选择"属性"命令。
  -或-
  
  为包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命令。
  II、选择"CHECK 约束"选项卡。
  III、从"选定的约束"列表中选择约束。
  IV、清除"对 INSERT 和 UPDATE 强制约束"复选框。
  可以在添加或修改数据后选择该选项,以确保约束能应用到后续的数据修改中。
  
  6、对复制禁用 CHECK 约束
  
  当在另一个数据库中复制表时,可以禁用 CHECK 约束。复制表时,表定义和数据从源数据库复制到目的数据库。这两个数据库通常(但不一定)位于不同的服务器上。如果 CHECK 约束仅针对源数据库,则可能会不必要地阻止新数据输入到目的数据库。当在远程站点上复制数据库时,不应重新应用 CHECK 约束,因为:
  
  数据在被输入原始数据库时将进行完整性检查。
  
  
  如果数据违反 CHECK 约束,复制将失败。
  对复制禁用 CHECK 约束
  I、在数据库关系图中右击包含约束的表,然后从快捷菜单中选择"属性"命令。
  -或-
  
  为包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命令。
  II、选择"CHECK 约束"选项卡。
  III、从"选定的约束"列表中选择约束。
  IV、清除"对复制强制约束"复选框。
  
  7、 删除 CHECK 约束
  删除 CHECK 约束
  当要删除对约束表达式包含的列所接受数据值的限制时,删除 CHECK 约束。
  
  删除 CHECK 约束
  
  I、在数据库关系图中右击包含约束的表,然后从快捷菜单中选择"属性"命令。
  -或-
  
  为包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命令。
  
  II、选择"CHECK 约束"选项卡。
  
  III、从"选定的约束"列表中选择约束。
  
  IV、选择"删除"按钮。
  注意  选择"删除"按钮将导致一个无法撤消的操作,而且不保存对数据库关系图所做的所有其它更改。若要撤消该操作,请不保存更改即关闭当前的数据库关系图和所有其它打开的数据库关系图。
  
  当保存表或关系图时,约束即从数据库中被删除。