oracle约束详解
### Oracle约束详解 在Oracle数据库管理系统中,约束是用于确保数据完整性和一致性的规则或条件。这些约束可以被定义在表级别的字段上,用来限制存储在表中的数据类型。通过实施约束,我们可以确保数据的质量,并避免错误的数据输入,进而提高数据库的可靠性和安全性。 #### 主键(Primary Key) 主键是一个表中的唯一标识符,它确保每一行记录都是唯一的。在创建表时,我们可以通过`PRIMARY KEY`来指定主键字段。例如: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5) PRIMARY KEY, ... ); ``` 或者使用`CONSTRAINT`关键字定义主键: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5), ... CONSTRAINT emp_pk PRIMARY KEY (EmpNo) ); ``` 主键字段不允许有重复值并且不允许为空值。如果在创建表时未指定主键,则可以通过`ALTER TABLE`语句添加: ```sql ALTER TABLE Employees ADD PRIMARY KEY (EmpNo); ``` 也可以通过指定复合主键的方式,即用多个列共同作为主键: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5), DeptNo NUMBER(3) NOT NULL, ... CONSTRAINT emp_pk PRIMARY KEY (EmpNo, DeptNo) ); ``` 同时,可以为复合主键指定索引存储空间和其他参数: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5), DeptNo NUMBER(3) NOT NULL, ... CONSTRAINT emp_pk PRIMARY KEY (EmpNo, DeptNo) USING INDEX TABLESPACE indx STORAGE (INITIAL 64K NEXT 64K) ); ``` #### 唯一性约束(Unique Constraint) 唯一性约束与主键类似,但允许字段值为NULL。它可以确保每个非空值都是唯一的。例如: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5), EName VARCHAR2(15), Phone VARCHAR2(15), Email VARCHAR2(30) UNIQUE, ... ); ``` 也可以在现有表上添加唯一性约束: ```sql ALTER TABLE Employees ADD CONSTRAINT emp_uk UNIQUE (EName, Phone); ``` 使用`USING INDEX`关键字可以为唯一性约束指定索引存储空间: ```sql ALTER TABLE Employees ADD CONSTRAINT emp_uk UNIQUE (EName, Phone) USING INDEX TABLESPACE indx; ``` #### 外键约束(Foreign Key) 外键约束用于确保引用完整性,即一个表中的列的值必须存在于另一个表的相应列中。例如: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5), DeptNo NUMBER(3) NOT NULL, ... CONSTRAINT emp_deptno_fk FOREIGN KEY (DeptNo) REFERENCES Dept (DeptNo) ); ``` 在外键约束中,还可以指定`ON DELETE`行为来处理删除操作,例如`ON DELETE CASCADE`表示当删除父表中的行时自动删除子表中的对应行。 #### 非空约束(Not Null) 非空约束确保字段值不能为空。例如: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5), DeptNo NUMBER(3) NOT NULL, ... ); ``` 可以在创建表时指定,也可以在现有表上修改: ```sql ALTER TABLE Employees MODIFY DeptNo NOT NULL; ``` #### 检查约束(Check Constraint) 检查约束用于确保列中的值满足特定条件。例如: ```sql CREATE TABLE Employees ( EmpNo NUMBER(5), Salary NUMBER CHECK (Salary > 0), ... ); ``` #### 小结 本文详细介绍了Oracle数据库中的各种约束类型及其用法。通过使用这些约束,可以有效地管理数据,确保其质量和一致性。无论是创建新表还是修改现有表,都可以轻松地应用这些约束。正确地使用约束不仅可以帮助我们维护数据的一致性,还可以简化应用程序的开发工作。


























* 在定义约束时可以通过CONSTRAINT关键字为约束命名,如果没有指定,ORACLE将自动为约束建立默认的名称
定义primary key约束(单个字段)
create table employees (empno number(5) primary key,...)
指定约束名
create table employees (empno number(5) constraint emp_pk primary key,...)
定义primary key约束(多个字段,在表级定义约束)
create table employees
(empno number(5),
deptno number(3) not null,
constraint emp_pk primary key(empno,deptno)
using index tablespace indx
storage (initial 64K
next 64K
)
)
ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引指定存储位置和存储参数
alter table employees add primary key (empno)
alter table employees add constraint emp_pk primary key (empno)
alter table employees add constraint emp_pk primary key (empno,deptno)
not null约束(只能在字段级定义NOT NULL约束,在同一个表中可以定义多个NOT NULL约束)
alter table employees modify deptno not null/null
unique约束
( empno number(5),
ename varchar2(15),
phone varchar2(15),
email varchar2(30) unique,
deptno number(3) not null,
constraint emp_ename_phone_uk unique (ename,phone)
)
alter table employees
add constraint emp_uk unique(ename,phone)
using index tablespace indx
定义了UNIQUE约束的字段中不能包含重复值,可以为一个或多个字段定义UNIQUE约束,因此,UNIQUE即可以在字段级也可以在表级定义,在UNIQUED约束的字段上可以包含空值.
foreign key约束
* 定义为FOREIGN KEY约束的字段中只能包含相应的其它表中的引用码字段的值或者NULL值
* 可以为一个或者多个字段的组合定义FOREIGN KEY约束
* 定义了FOREIGN KEY约束的外部码字段和相应的引用码字段可以存在于同一个表中,这种情况称为"自引用"
* 对同一个字段可以同时定义FOREIGN KEY约束和NOT NULL约束
定义了FOREIGN KEY约束的字段称为"外部码字段",被FORGIEN KEY约束引用的字段称为"引用码字段",引用码必须是主码或唯一码,包含外部码的表称为子表,
包含引用码的表称为父表.
A:
create table employees
(.....,
deptno number(3) NOT NULL,
constraint emp_deptno_fk foreign key (deptno)
剩余5页未读,继续阅读


- 粉丝: 36
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2018移动互联网概念及产品介绍ppt模板.pptx
- MACOSX上安装Windows全攻略.doc
- JAVA手机游戏(堡垒)的设计方案与开发.doc
- 网站HTTPS加密应用交付解决方案.pdf
- (源码)基于Arduino IDE的Bruin Supermileage HS板控制系统.zip
- vb+SQL学生信息管理系统-毕业论文.doc
- 论翻转课堂在士官计算机项目化教学中的应用.docx
- 单片机课设自动打铃器设计方案.doc
- EPSON软件常用指令介绍.ppt
- 小学计算机教学中小学生信息素养的培养策略.docx
- 基于单片机的数字温度计大学本科方案设计书.doc
- 基于入侵检测技术在电力信息网络安全中的应用探析.docx
- Java和SQL-Server2000开发职工和工资管理(全过程及代码).doc
- 基于网络平台的高校思政课实践教学构建分析.docx
- (源码)基于C++语言的数据结构与算法实践.zip
- 现代企业计算机辅助决策系统的探究.docx


