码迷,mamicode.com
首页 > 数据库 > 详细

oracle----约束

时间:2015-09-21 01:19:21      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:

约束的作用?

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

oracle中的5中约束:

1. 非空约束

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

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

  语法:

CREATE TABLE table_name(
    column1_name datatype NOT NULL......
)
SQL> create table userinfo_1(
  2  id number(6,0),
  3  username varchar2(20) not null,
  4  userpwd varchar2(20) not null
  5  );

表已创建。

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

SQL>

 

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

语法:

ALTER TABLE table_name
MODIFY column_name datatype NOT NULL;

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

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


SQL> delete from userinfo;

已删除4行。

SQL> alter table userinfo
  2  modify username varchar(20) not null;

表已更改。

SQL> desc userinfo;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(6)
 USERNAME                                  NOT NULL VARCHAR2(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                                  NOT NULL VARCHAR2(20)
 USERPWD                                            VARCHAR2(20)
 EMAIL                                              VARCHAR2(30)
 REGDATE                                            DATE

SQL>
SQL> ALTER table 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> create table userinfo_p(
  2  id number(6,0) primary key,
  3  username varchar2(20),
  4  userpwd varchar2(20));

表已创建。

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

SQL>

 

穿件联合主键约束:

语法:

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

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

SQL> create table userinfo_p1(
  2  id number(6,0),
  3  username varchar2(20),
  4  userpwd varchar2(20),
  5  constraint pk_id_username primary key(id,username));

表已创建。

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

SQL>

查询某一张表的约束时:

SQL> desc user_constraints;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 OWNER                                              VARCHAR2(30)
 CONSTRAINT_NAME                           NOT NULL VARCHAR2(30)
 CONSTRAINT_TYPE                                    VARCHAR2(1)
 TABLE_NAME                                NOT NULL VARCHAR2(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. 唯一约束

 

oracle----约束

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!