设为首页 加入收藏

TOP

Oracle基础知识笔记(10)约束(一)
2015-07-24 10:36:22 来源: 作者: 【 】 浏览:1
Tags:Oracle 基础知识 笔记 约束

表虽然建立完成了,但是表中的数据是否合法并不能有所检查,而如果要想针对于表中的数据做一些过滤的话,则可以通过约束完成,约束的主要功能是保证表中的数据合法性,按照约束的分类,一共有五种约束:非空约束、唯一约束、主键约束、检查约束、外键约束。

一、非空约束(NOT NULL):NK

当数据表中的某个字段上的内容不希望设置为null的话,则可以使用NOT NULL进行指定。

范例:定义一张数据表

DROP TABLE member PURGE;
CREATE TABLE member(
    mid NUMBER,
    name VARCHAR2(50) NOT NULL
);

因为此时存在了“NOT NULL”约束,所以下面插入两组数据。

范例:正确的数据

INSERT INTO member(mid,name) VALUES(1,'张三');
INSERT INTO member(mid,name) VALUES(null,'李四');
INSERT INTO member(name) VALUES('王五');

范例:插入错误的数据

INSERT INTO member(mid,name) VALUES(9,null);
INSERT INTO member(mid) VALUES(10);

此时了出现的错误提示:

ORA-01400: 无法将 NULL 插入 ("SCOTT"."MEMBER"."NAME")

本程序之中,直接表示出了“用户”.“表名称”.“字段”出现了错误。

二、唯一约束(UNIQUE):UK

唯一约束指的是每一列上的数据是不允许重复的,例如:email地址每个用户肯定是不重复的,那么就使用唯一约束完成。

DROP TABLE member PURGE;
CREATE TABLE member(
    mid NUMBER,
    name VARCHAR2(50) NOT NULL,
    email VARCHAR2(50) UNIQUE
);

范例:插入正确的数据

INSERT INTO member(mid,name,email) VALUES(1,'张三','mchina_tang@qq.com');
INSERT INTO member(mid,name,email) VALUES(2,'李四',null);

范例:插入错误的数据 ―― 重复数据

INSERT INTO member(mid,name,email) VALUES(3,'王五','mchina_tang@qq.com');

此时会出现如下的错误提示:

ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C005272)

可是这个时候的错误提示与之前的非空约束相比并不完善,因为现在只是给出了一个代号而已,这是因为在定义约束的时候没有为约束指定一个名字,所以由系统默认分配了,而且约束的名字建议的格式“约束类型_字段”,例如:“UK_email”,指定约束名称使用CONSTRAINT完成。

复制代码
DROP TABLE member PURGE;
CREATE TABLE member(
    mid NUMBER,
    name VARCHAR2(50) NOT NULL,
    email VARCHAR2(50),
    CONSTRAINT UK_email UNIQUE(email)
);
复制代码

以后再次增加错误数据时,提示信息如下:

ORA-00001: 违反唯一约束条件 (SCOTT.UK_EMAIL)

已经可以很明确的提示用户错误的位置。

三、主键约束(Primary Key):PK

主键约束 = 非空约束 + 唯一约束,在之前设置唯一的约束的时候发现可以设置为null,而如果现在使用了主键约束之后则不能为空,而且主键一般作为数据的唯一的一个标记出现,例如:人员的ID。

范例:建立主键约束

DROP TABLE member PURGE;
CREATE TABLE member(
    mid NUMBER PRIMARY KEY,
    name VARCHAR2(50) NOT NULL
);

范例:增加正确的数据

INSERT INTO member(mid,name) VALUES(1,'张三');

范例:错误的数据 ―― 主键设置为null

INSERT INTO member(mid,name) VALUES(null,'张三');

错误信息,与之前的非空约束的错误信息提示是一样的;

ORA-01400: 无法将 NULL 插入 ("SCOTT"."MEMBER"."MID")

范例:错误的数据 ―― 主键重复

INSERT INTO member(mid,name) VALUES(1,'张三');

错误信息,这个错误信息就是唯一约束的错误信息,但是信息不明确,因为没起名字。

ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C005276)

所以为了约束的使用方便,下面为主键约束起一个名字。

DROP TABLE member PURGE;
CREATE TABLE member(
    mid NUMBER,
    name VARCHAR2(50) NOT NULL,
    CONSTRAINT pk_mid PRIMARY KEY(mid)
);

此时,重复插入数据,则错误信息如下:

ORA-00001: 违反唯一约束条件 (SCOTT.PK_MID)

从正常的开发角度而言,一张表一般都只设置一个主键,但是从SQL语法的规定而言,一张表却可以设置多个主键,而此种做法称为复合主键,例如:参考如下代码:

DROP TABLE member PURGE;
CREATE TABLE member(
    mid NUMBER,
    name VARCHAR2(50) NOT NULL,
    CONSTRAINT pk_mid PRIMARY KEY(mid,name)
);

在复合主键的使用之中,只有两个字段的内容都一样的情况下,才被称为重复数据。

范例:插入正确的数据

INSERT INTO member(mid,name) VALUES(1,'张三');
INSERT INTO member(mid,name) VALUES(1,'李四');
INSERT INTO member(mid,name) VALUES(2,'李四');

范例:插入错误的数据

INSERT INTO member(mid,name) VALUES(1,'张三');

错误信息:

ORA-00001: 违反唯一约束条件 (SCOTT.PK_MID)

但是从开发的实际角度而言,一般都不使用复合主键,所以这个知识只是作为其相关的内容做一个介绍。只要是数据表,永远都只设置一个主键。

四、检查约束(Check):CK

检查约束指的是为表中的数据增加一些过滤条件,例如:

  • 设置年龄的时候范围是:0~200;
  • 设置性别的时候应该是:男、女;

    范例:设置检查约束

    复制代码
    DROP TABLE member PURGE;
    CREATE TABLE member(
        mid NUMBER,
        name VARCHAR2(50) NOT NULL,
        sex VARCHAR2(10) NOT NULL,
        age NUMBER(3),
        CONSTRAINT pk_mid PRIMARY KEY(mid),
        CONSTRAINT ck_sex CHECK(sex IN('男','女')),
        CONSTRAINT ck_age CHECK(age BETWEEN 0 AND 200)
    );
    复制代码

    范例:增加正确的数据

    INSERT INTO member(mi
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oracle快照(snapshot)管理 下一篇查看Oracle执行计划的几种常用方..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·请问c语言刚入门,该 (2025-12-26 10:21:04)
·python 编程怎么定义 (2025-12-26 10:21:01)
·09-指 针 (一)-c语言 (2025-12-26 10:20:58)
·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)