创建和使用表

表是用于存储信息的基本数据库对象。 创建表后,可以定义列,创建索引以及添加触发器和约束。 可以使用 CREATE TABLE 语句来创建表,定义表中列的物理属性以及定义约束以限制表中允许的值。

创建表时,需要了解空值和缺省值的概念。 null 值 指示行缺少列值。 它与零或全部空白的值不同。 这意味着未知。 空值不等于任何值,甚至不等于其他空值。 如果列不允许空值,那么必须将缺省值或用户提供的值指定给该列。

将行添加到表时,会将 缺省值 分配给列,并且不会为该列指定任何值。 如果没有为列定义特定的缺省值,那么将使用系统缺省值。

您将创建一个表以维护有关业务当前库存的信息。 此表包含有关库存中保留的项目,其成本,当前库存数量,上次订购日期和上次订购的数量的信息。 项目编号是必需值。 它不得为 null。 商品名称,现有数量和订单数量具有用户提供的缺省值。 上次订购日期和订购数量允许空值。

您还需要创建第二个表。 此表包含有关库存项目的供应商,他们提供的项目以及来自该供应商的项目成本的信息。

  1. 创建第一个名为 INVENTORY_LIST 的表:
    1. 在 "输入 SQL 语句" 屏幕上,输入CREATE TABLE并按 F4 (提示)。 显示以下屏幕 (输入区域尚未填充)。
                              Specify CREATE TABLE Statement
       
      Type information, press Enter.
       
      Table  . . . . . . . . .   INVENTORY_LIST______     Name
        Collection . . . . . .     SAMPLECOLL__           Name, F4 for list
       
      Nulls:  1=NULL, 2=NOT NULL, 3=NOT NULL WITH DEFAULT
       
      Column                FOR Column    Type              Length  Scale  Nulls
      ITEM_NUMBER_______    ____________  CHAR___________   6____    __      2
      ITEM_NAME_________    ____________  VARCHAR________   20___    __      3
      UNIT_COST_________    ____________  DECIMAL________   8____    2_      3
      QUANTITY_ON_HAND__    ____________  SMALLINT_______   _____    __      1
      LAST_ORDER_DATE___    ____________  DATE___________   _____    __      1
      __________________    ____________  _______________   _____    __      3
                                                                              Bottom
        Table CONSTRAINT . . . . . . . . . . . . .   N      Y=Yes, N=No
        Distributed Table  . . . . . . . . . . . .   N      Y=Yes, N=No
       
      F3=Exit   F4=Prompt           F5=Refresh   F6=Insert line    F10=Copy line
      F11=Display more attributes   F12=Cancel   F14=Delete line   F24=More keys
      
    2. 集合 提示中输入表名 INVENTORY_LIST 和模式名 SAMPLECOLL ,如下所示。
    3. 要为表定义的每个列都由显示的下半部分的列表中的一个条目表示。 对于每个列,输入列的名称,列的数据类型,其长度和小数位以及空属性。
    4. 按 F11 (显示更多属性) 以查看可以为列指定的更多属性。 这是可以指定缺省值的位置。
                              Specify CREATE TABLE Statement
       
      Type information, press Enter.
       
      Table  . . . . . . . . .   INVENTORY_LIST______     Name
        Collection . . . . . .     SAMPLECOLL__           Name, F4 for list
       
      Data:  1=BIT, 2=SBCS, 3=MIXED, 4=CCSID
       
      Column                Data  Allocate  CCSID  CONSTRAINT  Default
      ITEM NUMBER_______     _     _____    _____      N       __________________
      ITEM NAME_________     _     _____    _____      N       '***UNKNOWN***'___
      UNIT_COST_________     _     _____    _____      N       __________________
      QUANTITY_ON_HAND__     _     _____    _____      N       NULL______________
      LAST_ORDER_DATE___     _     _____    _____      N       __________________
      ORDER_QUANTITY____     _     _____    _____      N       20________________
      __________________     _     _____    _____      _       __________________
                                                                              Bottom
        Table CONSTRAINT . . . . . . . . . . . . .   N      Y=Yes, N=No
        Distributed Table  . . . . . . . . . . . .   N      Y=Yes, N=No
       
      F3=Exit   F4=Prompt           F5=Refresh   F6=Insert line    F10=Copy line
      F11=Display more attributes   F12=Cancel   F14=Delete line   F24=More keys
      
      注: 输入列定义的另一种方法是按 F4 (提示) ,将光标放在列表中的某个列条目上。 将显示用于定义单个列的所有属性的屏幕。
    5. 输入所有值后,按 Enter 键以创建表。 将再次显示 "输入 SQL 语句" 屏幕,其中包含一条指示已创建表的消息。
    注: 您可以在 "输入 SQL 语句" 屏幕上输入此 CREATE TABLE 语句,如下所示:
    CREATE TABLE SAMPLECOLL.INVENTORY_LIST 
    (ITEM_NUMBER CHAR(6) NOT NULL, 
     ITEM_NAME VARCHAR(20) NOT NULL WITH DEFAULT '***UNKNOWN***', 
     UNIT_COST DECIMAL(8,2) NOT NULL WITH DEFAULT, 
     QUANTITY_ON_HAND SMALLINT DEFAULT NULL, 
     LAST_ORDER_DATE DATE, 
     ORDER_QUANTITY SMALLINT DEFAULT 20)
  2. 创建名为供应商的第二个表。 您可以使用两种方法:
    1. 直接在 "输入 SQL 语句" 屏幕上输入以下命令。
    2. 按 F4 (提示) 以使用交互式 SQL 屏幕来创建定义。
    CREATE TABLE SAMPLECOLL.SUPPLIERS
         (SUPPLIER_NUMBER CHAR(4)NOT NULL,
         ITEM_NUMBER CHAR(6) NOT NULL,
         SUPPLIER_COST DECIMAL(8,2))