建立主键(PK)

 


当只有一个字段作为主键字段且不需要用户定义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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-605321/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值