zoukankan      html  css  js  c++  java
  • DB2 9 基础(730 检验)认证指南,第 5 局部: 措置惩罚 DB2 对象(4)

    developerWorks








    束缚

    DB2 供应了几种要领来节制什么数据可以存储在列中。这些特征被称为束缚(constraint)法则(rule),数据库办理挨次强迫一个数据列或一组列服从这些束缚。

    DB2 供应了三种类型的束缚:专一性、参照完整性和表搜查。

    以下几节具体描写每种束缚类型。

    专一性束缚

    专一性束缚 用于确保列中的值是专一的。可以对一个或多个列定义专一性束缚。专一性束缚中包含的每个列都必需定义为 NOT NULL

    专一性束缚可以定义为 PRIMARY KEYUNIQUE 束缚。这些可以在设立设置装备布置表时作为 CREATE TABLE SQL 语句的一局部定义,年夜概在设立设置装备布置表后哄骗 ALTER TABLE 语句添加。

    什么时分应该定义 PRIMARY KEY,什么时分应该定义 UNIQUE 键?这取决于数据的性质。在后面的示例中,BOOKS 表有一个 BOOKID 列,它用于专一地标识一本书。这个值还在包含与这本书相关的信息的其他表中哄骗。在这种环境下,应该把 BOOKID 定义为主键。DB2 在一个表中只允许定义一个主键。

    ISBN 列必需是专一的,但它不是一个在数据库中其他处所被援用的值。在这种环境下,ISBN 列应该定义为 UNIQUE

    CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY,
                        BOOKNAME VARCHAR(100),
                        ISBN CHAR(10) NOT NULL CONSTRAINT BOOKSISBN UNIQUE ) 
    


    CONSTRAINT 关头字允许为束缚指定一个称呼。在这个示例中,专一性束缚的称呼是 BOOKSISBN。要是想删除特定的束缚,那么在 ALTER TABLE 语句中哄骗这个称呼。

    DB2 在一个表中只允许定义一个主键;但可以定义多个专一性束缚。

    每当为列定义一个 PRIMARY KEYUNIQUE 束缚时,DB2 城市设立设置装备布置一个专一的索引以强迫列的专一性。DB2 不允许在异常的列上设立设置装备布置多个专一的索引。因此,不克不及在异常的列上同时定义 PRIMARY KEY 和 UNIQUE 束缚。比方,以下针对 BOOKS 表的语句将失败,由于曾经有了 PRIMARY KEY:

    ALTER TABLE BOOKS ADD  CONSTRAINT UNIQUE (BOOKID)
    CREATE UNIQUE INDEX IBOOKS ON BOOKS (BOOKID) 
    











    参照完整性束缚

    参照完整性束缚 用于定义表之间的干系并确保这些干系对峙有效。假定有一个表包含关于作者的信息,而另一个表列出这些作者曾经写的书。在 BOOKS 表和 AUTHORS 表之间有何等一种干系 —— 每本书都有一个作者,该作者必需存在于 AUTHORS 表中。每个作者都有一个存储在 AUTHORID 列中的专一的标识符。AUTHORID 在 BOOKS 表顶用于辨认每本书的作者。要定义这种干系,应该把 AUTHORS 表的 AUTHORID 列定义为主键,然后在 BOOKS 表上定义一个外键,从而与 AUTHORS 表中的 AUTHORID 列设立设置装备布置干系:

    CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY,
                          LNAME VARCHAR(100),
                          FNAME VARCHAR(100))
    CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY,
                        BOOKNAME VARCHAR(100),
                        ISBN CHAR(10),
                        AUTHORID INTEGER REFERENCES AUTHORS) 
    


    拥有与另一个表相关的主键的表(这里的 AUTHORS 表)被称为父表(parent table)。与父表相关的表(这里的 BOOKS 表)被称为附属表(dependent table)。可以为一个父表定义多个附属表。

    还可以定义一致个表中各行之间的干系。在这种环境下,父表和附属表是一致个表。

    要是为一组表定义了参照束缚,当对这些表尝试更新使用时,DB2 就会强迫这些表服从参照完整性法则:

    • DB2 确保只向定义了参照完整性束缚的列中拔出有效数据。这意味着在父表中必需老是有何等一行,该行的键值就是正要拔出到附属表中的行的外键值。比方,要是一本旧书要拔出到 BOOKS 表中,它的 AUTHORID 为 437,那么 AUTHORS 表中必需有 AUTHORID 为 437 的一行。
    • 当从父表中删除一行,而该行在附属表中有附属行时,DB2 也强迫尝试一些法则。DB2 采纳的使用取决于为表定义的删除法则。可以指定四个法则:RESTRICT、NO ACTION、CASCADE 和 SET NULL。
      • 要是指定了 RESTRICT 或 NO ACTION,那么 DB2 不允许删除父行。必需起首删除附属表中的行才华删除父表中的行。这条法则是默许设置,以是当定义 AUTHORS 和 BOOKS 表时这个法则也合用于它们。
      • 要是指定了 CASCADE,那么从父表中删除行时还会自动地删除统统附属表中的附属行。
      • 要是指定了 SET NULL,那么从父表中删除父行时附属行中的外键值被设置为空(要是可觉无暇的话)。
    • 在更新父表中的键值时,可以指定两条法则:RESTRICT 和 NO ACTION。要是附属表中有附属行,则 RESTRICT 不允许更新键值。要是在更新完成时在附属表中有附属行,而附属行在父表中没有父键,则 NO ACTION 将招致对父键值的更新使用被拒绝。









    表搜查束缚

    表搜查束缚 用于确保列数据不违背为列定义的法则,并限定表的某一列中的值。DB2 确保在拔出和更新时不违背这些束缚。

    假定向 BOOKS 表中添加一个示意书籍类型的列,该列允许的值为 ‘F’(小说)和 ‘N’(非小说)。可以添加一个列 BOOKTYPE,它带有以下的搜查束缚:

    ALTER TABLE BOOKS ADD BOOKTYPE CHAR(1) CHECK (BOOKTYPE IN ('F','N') ) 
    


    可以在设立设置装备布置表时定义搜查束缚,也可以在以后哄骗 ALTER TABLE SQL 语句添加它们。可以经由删除搜查束缚,然后哄骗 ALTER TABLE SQL 语句从头设立设置装备布置它们来修正搜查束缚。




    版权声明: 原创作品,允许转载,转载时请务必以超链接体例标明文章 原始来由 、作者信息和本声明。不然将清查法则责任。

  • 相关阅读:
    第五周
    第三章 程序的机器级表示
    第二章 信息的表示和处理
    嵌入式Linux应用开发——Linux下的C编程基础
    Linux基础入门(20135207 王国伊)
    Java实验报告(实验四)
    linux系统之pam模块
    linux 从入门到跑路-时间,日期问题
    linux 从入门到跑路-Shell和部分命令
    linux 从入门到跑路-挂载,命令的执行顺序
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1972950.html
Copyright © 2011-2022 走看看