当前位置:首页 > 数据库 > Oracle

oracle----约束

约束的作用?

用来定义一些规则!确保数据的完整性,精确性,可靠性。防止错误或者无效的信息输入。

oracle中的5中约束:

1. 非空约束

字段是必须输入的,必须存在;

(1),创建表时创建非空约束;

  语法:

            CREATE
            TABLE
             table_name(
    column1_name datatype 
            NOT
            NULL
            ......
)
        
SQL>createtable userinfo_1(
  2  id number(6,0),
  3  username varchar2(20) notnull,
  4  userpwd varchar2(20) notnull5  );

表已创建。

SQL>desc userinfo_1
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(6)
 USERNAME                                  NOTNULLVARCHAR2(20)
 USERPWD                                   NOTNULLVARCHAR2(20)

SQL>

 

(2),在修改表时添加非空约束;

语法:

            ALTER
            TABLE
             table_name
MODIFY column_name datatype 
            NOT
            NULL;

当修改表的时候如果表中有数据可能导致修改错误,如下!

SQL>altertable userinfo
  2  modify username varchar2(20) notnull;
altertable userinfo
*1 行出现错误:
ORA-02296: 无法启用 (SYSTEM.) - 找到空值


SQL>deletefrom userinfo;

已删除4行。

SQL>altertable userinfo
  2  modify username varchar(20) notnull;

表已更改。

SQL>desc userinfo;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(6)
 USERNAME                                  NOTNULLVARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 EMAIL                                              VARCHAR2(30)
 REGDATE                                            DATE

SQL>

 

(3),修改表时去除非空约束;

语法:

            ALTER
            TABLE
             table_name
MODIFY column_name datatype 
            NULL;
SQL>desc userinfo;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(6)
 USERNAME                                  NOTNULLVARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 EMAIL                                              VARCHAR2(30)
 REGDATE                                            DATE

SQL>
SQL>ALTERtable userinfo
  2  modify username varchar2(20) null;

表已更改。

SQL>desc userinfo;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 EMAIL                                              VARCHAR2(30)
 REGDATE                                            DATE

SQL>

 

 

2. 主键约束

主键约束确定表中的每行数据的唯一性;一张表中只可以设置一个主键约束,但是可以设置多个字段为主键(联合主键);

(1),创建表时设置主键约束:

  语法:

            CREATE
            TABLE
             table_name(
 column_name datatype 
            PRIMARY
            KEY
            ,......
);
        
SQL>
SQL>createtable userinfo_p(
  2  id number(6,0) primarykey,
  3  username varchar2(20),
  4  userpwd varchar2(20));

表已创建。

SQL>desc userinfo_p;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                        NOTNULLNUMBER(6)
 USERNAME                                           VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)

SQL>

 

穿件联合主键约束:

语法:

            CONSTRAINT
             constraint_name
    
            PRIMARY
            KEY(column_name1,......)

以上语句放在所有字段都写完之后的后面,用于创建联合主键约束!表级约束。

SQL>createtable userinfo_p1(
  2  id number(6,0),
  3  username varchar2(20),
  4  userpwd varchar2(20),
  5constraint pk_id_username primarykey(id,username));

表已创建。

SQL>desc userinfo_p1;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                        NOTNULLNUMBER(6)
 USERNAME                                  NOTNULLVARCHAR2(20)
 USERPWD                                            VARCHAR2(20)

SQL>

查询某一张表的约束时:

SQL>desc user_constraints;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 OWNER                                              VARCHAR2(30)
 CONSTRAINT_NAME                           NOTNULLVARCHAR2(30)
 CONSTRAINT_TYPE                                    VARCHAR2(1)
 TABLE_NAME                                NOTNULLVARCHAR2(30)
 SEARCH_CONDITION                                   LONG
 R_OWNER                                            VARCHAR2(30)
 R_CONSTRAINT_NAME                                  VARCHAR2(30)
 DELETE_RULE                                        VARCHAR2(9)
 STATUS                                             VARCHAR2(8)
 DEFERRABLE                                         VARCHAR2(14)
 DEFERRED                                           VARCHAR2(9)
 VALIDATED                                          VARCHAR2(13)
 GENERATED                                          VARCHAR2(14)
 BAD                                                VARCHAR2(3)
 RELY                                               VARCHAR2(4)
 LAST_CHANGE                                        DATE
 INDEX_OWNER                                        VARCHAR2(30)
 INDEX_NAME                                         VARCHAR2(30)
 INVALID                                            VARCHAR2(7)
 VIEW_RELATED                                       VARCHAR2(14)

SQL>
SQL>select constraint_name from user_constraints where table_name=USERINFO_P1;

CONSTRAINT_NAME
------------------------------PK_ID_USERNAME

SQL>

 

 

 

(2),修改表时添加主键约束:

 

 

(3),更改约束的名称:

 

(4),删除主键约束:

 

 

3. 外键约束

 

4.检查约束

 

 

5. 唯一约束

 

原文:http://www.cnblogs.com/blogofwyl/p/4824802.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐