`

约束和规则的区别

阅读更多
一、约束  
      约束定义关于列中允许值的规则,是强制完整性的标准机制。

      使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。SQL Server 2005支持五类约束: 
      1. NOT NULL指定不接受NULL值的列。      
      2. CHECK 约束对可以放入列中的值进行限制,以强制执行域的完整性。CHECK约束拒绝所有在检测条件中取值为false的值。可以为每列指定多个CHECK约束。下例显示名为chk_id约束的创建,该约束确保只对此关键字输入指定范围内的数字,以进一步强制执行主键的域。  
  CREATE TABLE cust_sample  
          (  
          cust_id int PRIMARY KEY,  
          cust_name char(50),  
          cust_address char(50),  
          cust_credit_limit money,  
          CONSTRAINT chk_id CHECK(cust_id BETWEEN 0 and 10000)  
          )  
     3. UNIQUE约束:对于 UNIQUE 约束中的列,表中不允许有两行包含相同的非空值。主键也强制执行唯一性,但主键不允许空值。UNIQUE   约束优先于唯一索引。   
      4. PRIMARY KEY 约束标识列或列集,这些列或列集的值唯一标识表中的行。在一个表中,不能有两行包含相同的主键值。不能在主键内的任何列中输入NULL值。在数据库中NULL是特殊值,代表不同于空白和0值的未知值。建议使用一个小的整数列作为主键。每个表都应有一个主键。
      一个表中可以有一个以上的列组合,这些组合能唯一标识表中的行,每个组合就是一个候选键。数据库管理员从候选键中选择一个作为主键。例如,在part_sample表中,part_nmbr和part_name都可以是候选键,但是只将part_nmbr选作主键。  
   
   CREATE TABLE part_sample  
          (
           part_nmbr  int  PRIMARY   KEY,  
           part_name char(30),  
           part_weight decimal(6,2),  
           part_color char(15)
          )  
   
      5. FOREIGN KEY约束标识表之间的关系。    
  一个表的外键指向另一个表的候选键。当外键值没有候选键时,外键可防止操作保留带外键值的行。在下例中,order_part   表建立一个外键引用前面定义的part_sample表。通常情况下,order_part在order表上也有一个外键,下面只不过是一个简单示例。  
   CREATE TABLE order_part  
          (
           order_nmbr int,  
           part_nmbr int  
           FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION,  
           qty_ordered int
          )  
  如果一个外键值没有候选键,则不能插入带该值(NULL除外)的行。如果尝试删除现有外键指向的行,ON DELETE子句将控制所采取的操作。
  ON DELETE子句有两个选项:  
  A、NO ACTION指定删除因错误而失败。  
  B、CASCADE 指定还将删除包含指向已删除行的外键的所有行。    
  如果尝试更新现有外键指向的候选键值,ON UPDATE 子句将定义所采取的操作。它也支持NO ACTION和CASCADE选项。 


  列约束和表约束  
  约束可以是列约束或表约束:    
  列约束被指定为列定义的一部分,并且仅适用于那个列(前面的示例中的约束就是列约束)。   
  表约束的声明与列的定义无关,可以适用于表中一个以上的列。    
  当一个约束中必须包含一个以上的列时,必须使用表约束。  
  例如,如果一个表的主键内有两个或两个以上的列,则必须使用表约束将这两列加入主键内。假设有一个表记录工厂内的一台计算机上所发生的事件。假定有几类事件可以同时发生,但不能有两个同时发生的事件属于同一类型。这一点可以通过将type列和time列加入双列主键内来强制执行。  
  CREATE TABLE factory_process  
        (
        event_type int,  
        event_time datetime,  
        event_site char(50),  
        event_desc char(1024),  
        CONSTRAINT event_key PRIMARY KEY(event_type,event_time)
        )  


二、规则:

   规则是一个向后兼容的功能,用于执行一些与CHECK约束相同的功能。CHECK约束是用来限制列值的首选标准方法。CHECK约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个CHECK约束。CHECK约束作为CREATE TABLE 语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。  
  下例创建一个规则,执行与前面主题中的CHECK约束示例相同的功能。SQL Srver2005   首选的方法是   CHECK   约束。  
  CREATE RULE id_chk AS @id BETWEEN 0 and 10000  
  GO  
  CREATE TABLE cust_sample  
        (  
        cust_id int  
        PRIMARY KEY,  
        cust_name char(50),  
        cust_address char(50),  
        cust_credit_limit money,  
        )  
  GO  
  sp_bindrule id_chk,'cust_sample.cust_id'  
  GO 
分享到:
评论

相关推荐

    cadence16.6差分约束规则

    在设置差分对的约束规则时,需要注意 Physical 和 Electrical 两种约束规则的区别,Physical 约束规则用于设置物理约束,而 Electrical 约束规则用于设置电气约束。 cadence16.6差分约束规则是指在 Cadence 16.6 ...

    键、索引、约束及其区别

    ### 键、索引、约束及其区别 #### 一、索引 **1.1 什么是索引?** 索引是对数据库表中一列或多列的值进行排序的一种结构。在关系型数据库中,索引是一种特殊的数据库结构,用于提高对表的操作效率,特别是对于`...

    Workbench_荷载、约束、接触定义(总结版)

    - **施加规则**:一个圆柱表面只能施加一个螺栓载荷。如果一个圆柱表面切分为两个部分,那么在施加螺栓载荷的时候一定要保证这两个柱面都要选中。 ##### 7. 力矩载荷 - **适用对象**:对于实体,力矩可以施加在...

    探析SQL Server触发器与完整性约束的区别.pdf

    完整性约束是数据库中用于确保数据准确性和一致性的规则,通常包括以下几种类型: 1. 实体完整性约束:每个数据表都应有一个主键约束,确保数据表中的记录是唯一的,即不允许有主键相同的两行数据。此外,主键不...

    mybatis-dtd约束文件

    在MyBatis的上下文中,DTD文件用于确保XML映射文件(mapper.xml)遵循特定的格式和规则,这样解析器在处理这些文件时就能正确理解其内容。 1. **DTD的基本概念** - DTD定义了XML文档的合法结构和内容。 - 它包含...

    xilinx时序约束教材

    时序约束的运用时机非常关键,它们在设计过程中添加到运行时间中,因此除非必要,否则不建议无差别地使用。通常情况下,对于时钟频率低于50MHz的设计,如果逻辑层级不是太多(比如7级或更少),则不必要使用时序约束...

    Allegro:基本约束主要是Physical与Spacing

    很多人不明白 Class 和 Bus 的区别,实际上,Class 是按照规则划分,而 Bus 则是按照功能划分的。 创建 Class 创建 Class 的步骤如下: 1. 框选一组所需的 Net 右键创建 Class。 2. Class 所有规则都到 ...

    DDL_约束_思维导图

    **三、非空约束与唯一约束的区别** 非空约束关注的是列值是否为空,而唯一约束则关注的是值是否重复。非空约束允许单个NULL值,但唯一约束不允许任何重复值,包括NULL。 **四、主键约束的重要性** 主键是数据库表的...

    MySQL SQL高级特性 字段约束-索引-视图-外键学习实践

    在本部分内容中,重点介绍了NULL和NOT NULL修饰符的使用和区别。在MySQL中,NULL意味着该字段可以没有值,即空值;而NOT NULL修饰的字段则必须在插入记录时给出值,不能为NULL。对于NOT NULL字段的效率之所以比NULL...

    SQL Server约束在维护数据完整性中的运用.pdf

    实体完整性通过主键约束和标识列约束来实现,这些约束强制每一条记录都能通过一个唯一的标识与其他记录区别开来。 值域完整性,又称为域完整性,是指对数据库中某列的值进行限制,确保该列中的值满足特定的条件。...

    MySQL约束(三).pdf

    - **数据分析师**:在进行数据分析前,需要了解数据的约束规则。 #### 结论 通过对MySQL中的各种约束类型及其应用的学习,可以帮助用户更好地管理和维护数据库的完整性。无论是对于初学者还是有经验的专业人士来说...

    DTD约束文档

    6. **DTD与XML Schema的区别**:虽然DTD是XML早期的验证工具,但XML Schema(XSD)后来成为更现代和功能更强大的替代方案,提供了类型系统、命名空间支持等更多特性。 7. **DTD在Servlet配置中的应用**:讲解如何...

    绘图系统约束求解算法及数据结构.pdf

    这种方法的优点是速度快、实现简单,便于将解决局部约束规则与传播机理分开,易于扩充规则。然而,当约束图中存在环时,这种方法不能解决此类约束集。 约束松弛和牛顿-拉夫森方法是一种典型的递归数值逼近方法。其...

    SQL Server中触发器与约束的应用比较.pdf

    在比较触发器和约束的应用时,我们可以发现几个重要的区别。首先,约束能够提供更优的性能,因为它是在数据层面直接实现的,而触发器则是一种程序化的方法,需要执行存储过程。因此,在需要进行简单数据验证时,使用...

    数据库的三大范式及五大约束.docx

    数据库约束是对数据的限制和规则,目的是确保数据的一致性和正确性。数据库的五大约束分别是 PRIMARY KEY、UNIQUE、DEFAULT、NOT NULL 和 FOREIGN KEY。 PRIMARY KEY PRIMARY KEY 是设置主键约束,主键是表中的...

    约束理论TOC在生产管理中的应用.pptx

    2. OPT的九条原则:这些原则强调追求物流平衡而非生产能力平衡,非瓶颈资源的利用由系统约束决定,以及资源的“利用”与“活力”的区别等。这些原则指导了生产计划与控制的策略制定。 3. 企业的目标体系:TOC认为,...

    Vivado使用误区与进阶-XDC约束IO篇上.pdf

    理解时序分析工具如何选取路径分析的发送端(Launch)和接收端(Capture)时钟沿(Clock Edges),在 Setup 和 Hold 分析时又有怎样的具体区别,以及这些数字在时序报告中如何体现等等是设置正确 I/O 约束的基础。...

    (企业经营管理)国有企业经营者激励与约束制度.pdf

    经济学家钱颖一强调,市场经济的本质区别在于其激励和约束机制,它们在资源配置中起到决定性作用。 **二、产权与委托代理** 产权是指实际运营中关于财产的权利、责任和利益关系。产权清晰对于激励约束制度至关重要...

    数据库技术与应用 设置学生表外键约束-A学习任务书.doc

    在数据库技术中,外键约束是关系数据库设计中不可或缺的一部分,它主要用于确保数据的一致性和完整性。本学习任务书将重点讲解如何在学生表中设置外键约束,以实现不同表之间的关联,这对于电子信息工程技术专业的...

Global site tag (gtag.js) - Google Analytics