Oracle笔记(十)约束(一)

2014-11-24 16:18:22 · 作者: · 浏览: 0

Oracle笔记(十)约束
相关链接:
Oracle笔记(一)Oracle简介及安装
http://www.2cto.com/database/201209/154049.html;
Oracle笔记(二)SQLPlus命令
http://www.2cto.com/database/201209/154051.html;
Oracle笔记(三)Scott用户的表结构
http://www.2cto.com/database/201209/154052.html;
Oracle笔记(四)简单查询、限定查询、数据的排序
http://www.2cto.com/database/201209/154054.html;
Oracle笔记(五)单行函数
http://www.2cto.com/database/201209/154056.html;
Oracle笔记(六)多表查询
http://www.2cto.com/database/201209/154060.html;
Oracle笔记(七)数据更新、事务处理、数据伪列
http://www.2cto.com/database/201209/154062.html;
Oracle笔记(八)复杂查询及总结
http://www.2cto.com/database/201209/154063.html;
Oracle笔记(九)表的创建及管理
http://www.2cto.com/database/201209/154316.html
表虽然建立完成了,但是表中的数据是否合法并不能有所检查,而如果要想针对于表中的数据做一些过滤的话,则可以通过约束完成,约束的主要功能是保证表中的数据合法性,按照约束的分类,一共有五种约束:非空约束、唯一约束、主键约束、检查约束、外键约束。
一、非空约束(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('王五');
范例:插入错误的数据 www.2cto.com
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)
); www.2cto.com
以后再次增加错误数据时,提示信息如下:
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)
);
此时,重复插