Oracle-数据表约束

1. 数据表约束简介

    数据库不仅仅是用来存储数据,它还必须保证所存储数据的正确性。如果数据不准确或不一致,那么该数据表的完整性就可能受到了破坏,从而给数据库本身的可靠性带来问题。为了维护数据库中数据的完整性,在创建表时常常需要定义一些约束

约束说明
非空约束表示此字段内容不许为空
唯一性约束此列的内容不允许重复
主键约束表示一个唯一的标识,具有唯一性和非空性
外键约束用来约束两个表中列之间的关系
检查约束用户自行编写设置的内容的检查条件

2. 四种约束介绍

2.1 非空约束

2.1.1 设置非空约束

如果某些列的值时可有可无的,那么可以定义这些列允许为NULL。

CREATE TABLE books
(
	BookNo NUMBER(4) NOT NULL,
	BookName VARCHAR2(30),
	Author VARHAR2(10),
	SalePrice NUMBER(9,2),
	PublisherNo VARCHAR2(4) NOT NULL,
	PublisherDate DATE,
	ISBN VARCHAR2(20) NOT NULL
);
2.1.2 修改非空约束

在创建完表后,也可以使用ALTER TABLE … MODIFY 语句为已经创建的表删除或重新定义 NOT NULL约束。

ALTER TABLE books MODIFY bookname NOT NULL;
2.1.3 删除非空约束
ALTER TABLE books MODIFY bookname NULL;

2.2 唯一性约束

唯一性约束是为了解决在一张表中设置除了主键所在列外,多个列都不允许重复数据的存在。

2.2.1 设置约束

创建表时设置约束

CREATE TABLE members
(
	MemNo NUMBER(4) NOT NULL,
	Phone VARCHAR2(20),
	Email VARCHAR2(40),
	QQ VARCHAR2(20) CONSTRAINT QQ_UK UNIQUE, -- 设置唯一性约束,QQ_UK是约束名
	CONSTRAINT Mem_pk PRIMARY KEY (MemNo) -- 设置MemNo列为主键,
);

如果唯一性约束的列有值,则不允许重复,但是可以插入多个NULL值,即改列的空值是可以重复的。
对现有的表添加唯一性约束

ALTER TABLE Members ADD CONSTRAINT Email_UK UNIQUE (Email);
2.2.2 删除唯一性约束
ALTER TABLE members DROP CONSTRAINT Email_UK;

2.3 主键约束

主键约束用于唯一地标识表中的每一行记录。在一个表中,最多只能有一个主键约束,主键约束既可以有一个列组成,也可以由两个或多个列组成(联合主键)。主键约束同时也具有非空约束的特性。

2.3.1 创建表的同时设置主键约束
CREATE TABLE members
(
	MemNo NUMBER(4) NOT NULL,
	Phone VARCHAR2(20),
	Email VARCHAR2(40),
	QQ VARCHAR2(20) CONSTRAINT QQ_UK UNIQUE, -- 设置唯一性约束,QQ_UK是约束名
	CONSTRAINT Mem_pk PRIMARY KEY (MemNo) -- 设置MemNo列为主键,
);
2.3.2 创建表之后添加主键约束
ALTER TABLE book ADD CONSTRAINT Mem_pk PRIMARY KEY (MemNo);
2.3.3 删除主键约束
ALTER TABLE book DROP CONSTRAINT Mem_pk;

2.4 外键约束

前面的三种约束都是在一张表中设置的,现在如果需要设置两张关系表的约束,则可以通过外键约束来完成。

2.4.1 设置外键约束
-- 创建两个新表
CREATE TABLE emp_temp as SELECT * FROM EMP;
CREATE TABLE dept_temp as SELECT * FROM DEPT;
-- 为dept_temp表的deptno设置主键;
ALTER TABLE dept_temp ADD CONSTRAINT dept_pk PRIMARY KEY (deptno);
-- 为emp_temp表的empno设置主键;
ALTER TABLE emp_temp ADD CONSTRAINT emp_pk PRIMARY KEY(empno);
-- 为emp_temp表的deptno列创建外键约束
ALTER TABLE emp_temp ADD CONSTRAINT emp_dept_fk 
FOREIGN KEY(deptno) REFERENCES dept_temp(deptno);
2.4.2 删除具有外键约束的表
  1. 删除被引用表的数据前,应先删除外键表所对应的数据;
  2. 删除被引用表前,应先将外键表删除。
    可以使用关键字CASCADEs CONSTRAINT来强制删除被引用表,代码如下:
DROP TABLE dept_temp CASCADE CONSTRAINT;
2.4.3 删除外键约束
ALTER TABLE emp_temp DROP CONSTRAINT emp_dept_fk;

3. 禁用和激活约束

约束创建之后,如果没有经过特殊处理,该约束就一直起作用。但也可以根据实际需要,临时禁用某个约束。当某个约束被禁用后,该约束就不再起作用了,但它还存在于数据库中。

3.1 在定义约束时禁用

在使用CREATE TABLE或ALTER TABLE语句定义约束时,如果使用关键字DISABLE,则约束是被禁用的。

CREATE TABLE StuInfo
(
	StuCode VARCHAR2(4) NOT NULL,
	StuName VARCHAR2(10) NOT NULL,
	/*
	check约束即检查约束,它的作用为对表中的数据进行过滤,在更新数据时,数据
	只有满足指定的过滤条件,才可以更新成功,否则不能更新。
	*/
	AGE INT CONSTRAINT Age_ck CHECK (age>0 and age<120) DISABLE
);
3.2 禁用已经存在的约束
ALTER TABLE Books_1 DISABLE CONSTRAINT BOOK_PK;
3.3 激活约束
ALTER TABLE books_1 ENABLE CONSTRAINT BOOK_PK;
3.4 删除约束
ALTER TABLE books_1 DROP CONSTRAINT BOOK_PK;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值