Oracle数据库----数据库的完整性约束

数据库的完整性一般分为四类:实体完整性、域完整性、参照完整性和用户定义的完整性。

实体完整性:要求表中的每一行在表中是唯一的实体,既不能为空也不能取重复的值。
域完整性:指数据库表中的字段必须满足某种特定的数据类型或约束。
参照完整性:保证数据库中相关联的表里面数据的正确性

一、Oracle提供了多种约束:

1、主键约束(PRIMARY KEY)

主键约束在每个数据表中有且仅有一个
使用ALTER TABLE语句设置主键约束的语法格式如下:

ALTER TABLE table_name 
ADD CONSTRAINT constraint_name PRIMARY KEY(column_name)

2、唯一约束(UNIQUE)

唯一约束和主键约束都是设置表中的列不能取重复值,与主键约束不同的是,一个表可以有多个唯一约束。
使用ALTER TABLE语句设置唯一约束的语法格式如下:

ALTER TABLE table_name 
ADD CONSTRAINTS constraint_name UNIQUE(column_name)

3、非空约束(NOT NULL)

非空约束是用来约束表中的列不允许取空值的。NOT NULL约束只能在列级别上定义。在一个表中可以定义多个NOT NULL约束。
使用ALTER TABLE语句设置非空约束的语法格式如下:

ALTER TABLE table_name 
MODIFY column_name NOT NULL

如果要取消某个列非空的约束,直接使用MODIFY语句把该列的非空约束写成NULL即可。

4、检查约束(CHECK)

CHECK约束通过检查输入到表中的数据值来维护域的完整性,只有符合输入条件的数据才允许输入到表中。
使用ALTER TABLE语句设置检查约束的语法格式如下:

ALTER TABLE table_name 
ADD CONSTRAINTS constraint_name CHECK(condition)

5、外键约束(FOREIGN KEY)

外键约束保证了数据库的参照完整性。它主要用作把一个表中的数据和另一个表中的数据进行关联。
外键约束可以保证使用外键约束的数据库列于所引用的主键约束的数据列一致,外键约束在一个数据表中可以有多个。
外键约束是建立在两张表中的约束,添加外键约束的语法格式如下:

ALTER TABLE table_name 
ADD CONSTRAINTS constraint_name FOREIGN KEY(column_name)
REFERENCES table_name (column_name) ON DELETE CASCADE

6、默认值约束(DEFAULT)

用于对指定的列设置默认值。
其中,唯一约束、非空约束、检查约束和默认值约束可以实现数据库的域完整性。

7、删除约束

删除约束的语法格式:

ALTER TABLE table_name 
DROP CONSTRAINTS constraint_name 

8、对约束的定义既可以创建表的同时可以指定相应的约束,也可以通过修改表的结构添加约束。

如:创建用户表Sys_User,要求UserID 是主键,UserName列只能取唯一值,不得重复,UserType字段取值大于0小于3,UserPwd的默认值为111111,代码如下:

CREATE TABLE Sys_User
(UserID Number Primary Key,
UserName Varchar2(20) NOT NULL UNIQUE,
UserType Number(1) CHECK(UserType>0 AND UserType<3 ),
UserPwd Varchar2(40) DEFAULT('111111'),
Remark Varchar2(200)
);

在这里插入图片描述
打开Oracle SQL Developer查看:
在这里插入图片描述


二、Oracle完整性约束实例

以高校选课管理系统为例,经分析得知,学生和课程的关系是多对多关系,需要创建学生表、课程表和选课表。学生表的结构如下表所示。
在这里插入图片描述

1、创建学生表的代码如下:

CREATE TABLE Students
(Student_ID char(11),
Sname Varchar2(8),
Ssex Varchar2(2),
Sbirth date,
Nationality Varchar2(40),
Dept_ID char(3),
Class_ID char(5)
);

在这里插入图片描述
在这里插入图片描述

2、创建课程表的代码如下:

CREATE TABLE Courses
(Course_ID Varchar2(4),
Cname Varchar2(20),
Credits NUMBER(1) );

在这里插入图片描述
在这里插入图片描述

3、为学生表添加主键约束:

ALTER TABLE Students
ADD CONSTRAINT pk_sid PRIMARY KEY(Student_ID);

在这里插入图片描述

4、创建选课表的代码如下:

CREATE TABLE SC
(Student_ID char(7) ,
Course_ID Varchar2(4),
Grade NUMBER,
CONSTRAINT fk_sid FOREIGN KEY (Student_ID) REFERENCES Students(Student_ID)
ON DELETE CASCADE);

在这里插入图片描述

5、为课程表的课程名称设置唯一值约束。

ALTER TABLE Courses
ADD CONSTRAINT uq_cn UNIQUE(cname);

在这里插入图片描述

6、为学生表的学生姓名设置非空约束。

ALTER TABLE Students
MODIFY Sname NOT NULL;

在这里插入图片描述

7、选修表的成绩列取值要求在0~100之间。

ALTER TABLE SC
ADD CONSTRAINT chk_grade CHECK (Grade>0 and Grade<100);

在这里插入图片描述

8、为选修表的课程号设置外键

选修表中的学生要参考学生表的信息,课程号需要参考课程表的信息。由于在创建选修表时已经设置了学号为外键,此处为选修表的课程号设置外键。

想要设置外键,应该先为两个表设置主键
(1)为选修表的课程号设置主键:

ALTER TABLE SC 
ADD CONSTRAINTS pk_sids PRIMARY KEY(Course_ID);

(2)为课程表的课程编号设置主键:

ALTER TABLE Courses
ADD CONSTRAINTS pk_sidc PRIMARY KEY(Course_ID);

在这里插入图片描述
(3)为选修表的课程号设置外键:

ALTER TABLE SC
ADD CONSTRAINT fk_sidsc FOREIGN KEY (Course_ID) REFERENCES Courses(Course_ID)
ON DELETE CASCADE;

在这里插入图片描述

9、删除5中为课程表创建的唯一约束。

ALTER TABLE Courses
DROP CONSTRAINT uq_cn;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hyh17808770899/article/details/106467324