ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 建立主键(PK)

建立主键(PK)

原创 Linux操作系统 作者:tolywang 时间:2008-06-30 11:25:48 0 删除 编辑

 


当只有一个字段作为主键字段且不需要用户定义PK Constraint 名称的时候 :


CREATE TABLE SFIS1.A_TEST_T
(
  EMP_NO        VARCHAR2(25 BYTE)     PRIMARY KEY ,
  EMP_NAME      VARCHAR2(20 BYTE)     NOT NULL,
  EMP_RANK      VARCHAR2(1 BYTE),
  CLASS_NAME    VARCHAR2(10 BYTE)
)
TABLESPACE BASE_DATA ; 

 


Toad中显示:

 

CREATE TABLE SFIS1.A_TEST_T
(
  EMP_NO      VARCHAR2(25 BYTE),
  EMP_NAME    VARCHAR2(20 BYTE)                 NOT NULL,
  EMP_RANK    VARCHAR2(1 BYTE),
  CLASS_NAME  VARCHAR2(10 BYTE)
)
TABLESPACE BASE_DATA ;

 


ALTER TABLE SFIS1.A_TEST_T ADD (
  PRIMARY KEY
 (EMP_NO)
    USING INDEX
    TABLESPACE BASE_DATA ; 

 

隐含的建立的unique index 名称为 SYS_C007673  . Toad显示的
脚本中没有出现 。

 

 

 

============================================================================================== 

 

 


一个或多个字段联合作为主键或需要在创建table时定义PK名称的时候,使用如下的语句:

 


CREATE TABLE SFIS1.A_TEST_T_1
(
  EMP_NO        VARCHAR2(25 BYTE)     NOT NULL,
  EMP_NAME      VARCHAR2(20 BYTE)     NOT NULL,
  EMP_RANK      VARCHAR2(1 BYTE),
  CLASS_NAME    VARCHAR2(10 BYTE),
  CONSTRAINT PK_EMPNO  PRIMARY KEY (EMP_NO) 
)
TABLESPACE BASE_DATA ;

 

 

Toad中显示的脚本是:

 

CREATE TABLE SFIS1.A_TEST_T_1
(
  EMP_NO      VARCHAR2(25 BYTE)                 NOT NULL,
  EMP_NAME    VARCHAR2(20 BYTE)                 NOT NULL,
  EMP_RANK    VARCHAR2(1 BYTE),
  CLASS_NAME  VARCHAR2(10 BYTE)
)
TABLESPACE BASE_DATA ; 

 


CREATE UNIQUE INDEX SFIS1.PK_EMPNO ON SFIS1.A_TEST_T_1
(EMP_NO)
LOGGING
TABLESPACE BASE_DATA ; 

 

ALTER TABLE SFIS1.A_TEST_T_1 ADD (
  CONSTRAINT PK_EMPNO
 PRIMARY KEY
 (EMP_NO)
    USING INDEX
    TABLESPACE BASE_DATA ; 

 


由于用户指出了constraint 的名称 PK_EMPNO ,所以系统为用户建立 UNIQUE INDEX 名称

 

 


=================================================================================================== 

 

 

多个字段联合作为主键且需要在创建table时定义PK名称的时候,使用如下的语句:

 

CREATE TABLE SFIS1.A_TEST_T_2
(
  EMP_NO        VARCHAR2(25 BYTE)     NOT NULL,
  EMP_NAME      VARCHAR2(20 BYTE)     NOT NULL,
  EMP_RANK      VARCHAR2(1 BYTE),
  CLASS_NAME    VARCHAR2(10 BYTE),
  CONSTRAINT PK_EMPNONAME  PRIMARY KEY (EMP_NO,EMP_NAME) 
)
TABLESPACE BASE_DATA ; 

 


Toad中显示的脚本是:

 


CREATE TABLE SFIS1.A_TEST_T_2
(
  EMP_NO      VARCHAR2(25 BYTE)                 NOT NULL,
  EMP_NAME    VARCHAR2(20 BYTE)                 NOT NULL,
  EMP_RANK    VARCHAR2(1 BYTE),
  CLASS_NAME  VARCHAR2(10 BYTE)
)
TABLESPACE BASE_DATA ; 

 

CREATE UNIQUE INDEX SFIS1.PK_EMPNONAME ON SFIS1.A_TEST_T_2
(EMP_NO, EMP_NAME)
LOGGING
TABLESPACE BASE_DATA ; 

 

ALTER TABLE SFIS1.A_TEST_T_2 ADD (
  CONSTRAINT PK_EMPNONAME
 PRIMARY KEY
 (EMP_NO, EMP_NAME)
    USING INDEX
    TABLESPACE BASE_DATA ; 

 


Toad生成的脚本一样也是先建立table, 然后建立unique index ,最后修改table,加入constraint .

 

 


===================================================================================================  

 

 


先建立table, 然后通过alter table 加入PK 值(用户自己定义PK名称) 。

 

CREATE TABLE SFIS1.A_TEST_T_3
(
  EMP_NO        VARCHAR2(25 BYTE)     NOT NULL,
  EMP_NAME      VARCHAR2(20 BYTE)     NOT NULL,
  EMP_RANK      VARCHAR2(1 BYTE),
  CLASS_NAME    VARCHAR2(10 BYTE) 
)
TABLESPACE BASE_DATA ;

 

ALTER TABLE SFIS1.A_TEST_T_3 ADD (
  CONSTRAINT PK_NONAME3
 PRIMARY KEY
 (EMP_NO, EMP_NAME)
    USING INDEX
    TABLESPACE BASE_DATA
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          1M
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       2147483645
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

 


Toad 中显示脚本:


CREATE TABLE SFIS1.A_TEST_T_3
(
  EMP_NO      VARCHAR2(25 BYTE)                 NOT NULL,
  EMP_NAME    VARCHAR2(20 BYTE)                 NOT NULL,
  EMP_RANK    VARCHAR2(1 BYTE),
  CLASS_NAME  VARCHAR2(10 BYTE)
)
TABLESPACE BASE_DATA
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          16K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
NOMONITORING;

 


CREATE UNIQUE INDEX SFIS1.PK_NONAME3 ON SFIS1.A_TEST_T_3
(EMP_NO, EMP_NAME)
LOGGING
TABLESPACE BASE_DATA
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          1M
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;

 


ALTER TABLE SFIS1.A_TEST_T_3 ADD (
  CONSTRAINT PK_NONAME3
 PRIMARY KEY
 (EMP_NO, EMP_NAME)
    USING INDEX
    TABLESPACE BASE_DATA
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          1M
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       2147483645
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

 


===================================================================================================  


从建立主键的脚本中可以看出非空唯一索引和PK之间的区别,非空和PK都是constraint , 唯一索引是Index . 
且PK可以有外键FK . 注: 外键也是contraint . 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-605321/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13243338