CREATE TABLE Location(
loc_id NUMBER(6),
room VARCHART2 (20)
CONSTRAIN location_loc_id_pk PRIMARY KEY(loc_id));
问题是我不明白红色部分,这个部分是可以随便写吗?

解决方案 »

  1.   

    红色部分是你定义的约束名称,可以自己随便写,不过最好按照命名规则来,location是表名 loc_id是列名,pk是主键约束的缩写。
    日后你需要查询这些约束的时候,就会一目了然了。
      

  2.   

    如果不想命名的话,可以省略“CONSTRAINT location_loc_id_pk”
    当然,最好还是指定一下名称,注意名称的长度不能超过30字符
      

  3.   


    这是主键的名称,可是可以,但长远来看最好是有规则的好些,方便以后
    也可以这样写
    CREATE TABLE Location(
    loc_id NUMBER(6) PRIMARY KEY,
    room VARCHART2 (20)
    );
      

  4.   


    SQL> edi
    已写入 file afiedt.buf  1  CREATE TABLE Location(
      2  loc_id NUMBER(6) PRIMARY KEY,
      3  room VARCHAR2 (20)
      4* )
      5  /表已创建。---lz 你的表中 room 字段类型名字写做了  多了个t(room VARCHART2 (20))
      

  5.   

    location_loc_id_pk是自己起的一个主键约束名。也可以起成别的。
      

  6.   

    呵呵,不是很明白楼主说的随便写是啥意思?有空格?全数字?还有中文?还是咋的,一般来说写什么没有限制,但是就自己定义名称规则来说,一个企业或者一个项目内部都有定义规则,需要按照规则办事以后便于存档维护以及产品化和移植过程。如可以定义约束为:CON_约束类别_表名称_字段名称当然如果有空格,将其用英文 双引号 引用起来即可,全数字最好不要那么搞了。另外最后还有一个限制通过DESC user_constraints;SQL> DESC user_constraints;
    Name              Type         Nullable Default Comments                                                                    
    ----------------- ------------ -------- ------- --------------------------------------------------------------------------- 
    OWNER             VARCHAR2(30)                  Owner of the table                                                          
    CONSTRAINT_NAME   VARCHAR2(30)                  Name associated with constraint definition                                  
    CONSTRAINT_TYPE   VARCHAR2(1)  Y                Type of constraint definition                                               
    TABLE_NAME        VARCHAR2(30)                  Name associated with table with constraint definition                       
    SEARCH_CONDITION  LONG         Y                Text of search condition for table check                                    
    R_OWNER           VARCHAR2(30) Y                Owner of table used in referential constraint                               
    R_CONSTRAINT_NAME VARCHAR2(30) Y                Name of unique constraint definition for referenced table                   
    DELETE_RULE       VARCHAR2(9)  Y                The delete rule for a referential constraint                                
    STATUS            VARCHAR2(8)  Y                Enforcement status of constraint -  ENABLED or DISABLED                     
    DEFERRABLE        VARCHAR2(14) Y                Is the constraint deferrable - DEFERRABLE or NOT DEFERRABLE                 
    DEFERRED          VARCHAR2(9)  Y                Is the constraint deferred by default -  DEFERRED or IMMEDIATE              
    VALIDATED         VARCHAR2(13) Y                Was this constraint system validated? -  VALIDATED or NOT VALIDATED         
    GENERATED         VARCHAR2(14) Y                Was the constraint name system generated? -  GENERATED NAME or USER NAME    
    BAD               VARCHAR2(3)  Y                Creating this constraint should give ORA-02436.  Rewrite it before 2000 AD. 
    RELY              VARCHAR2(4)  Y                If set, this flag will be used in optimizer                                 
    LAST_CHANGE       DATE         Y                The date when this column was last enabled or disabled                      
    INDEX_OWNER       VARCHAR2(30) Y                The owner of the index used by the constraint                               
    INDEX_NAME        VARCHAR2(30) Y                The index used by the constraint                                            
    INVALID           VARCHAR2(7)  Y                                                                                            
    VIEW_RELATED      VARCHAR2(14) Y        
    可以发现CONSTRAINT_NAME为VARCHAR2(30),那么你的约束名称长度自然不能超过30个字符,一般没有中文的话,就是和length字符串长度等价,有中文就和lengthb(约束名称),可以自己测试一下超过这个数字会提示什么。呵呵