本文主要是介绍Oracel第四讲----约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是约束
约束:是在表上强制执行的数据校验规则,用于保护数据的完整性
约束分类:
- NOT NULL (非空)
- UNIQUE (唯一键)
- PRIMARY KEY (主键)
- FOREIGE KEY (外键)
- CHECK (检查)
非空(NOT NULL)约束用于确保字段不能为空,非空约束只能在字段级定义。
CREATE TABLE emp(sid NUMBER(3) NOT NULL,--系统自动命名约束
birth DATE CONSTRAINT emp_bir NOT NULL--将约束命名为emp_bir);
唯一性(UNIQUE)约束用于确保其所约束的字段或字段组合不出现重复的值。
- 唯一性约束的字段允许出现空值
- Oracel会自动为唯一性约束创建对应的唯一性索引
- 唯一性约束既可以在字段级定义,也可以在表级定义
CREATE TABLE emp(sid NUMBER(3) CONSTRAINT emp_sid UNIQUE);
主键(PRIMARY KEY)用于唯一性标识表中的某一行记录,其功能上相当于非空且唯一。
- 一个表中只允许一个主键,可以单个字段或多字段的组合。
- Oracel会自动生成为主键字段创建对应的唯一性索引。
- 主键约束既可以在字段级定义、也可以在表级定义。
CREATE TABLE emp(sid NUMBER(3) PRIMARY KEY);--字段级定义
CREATE TABLE student(sid NUMBER(3),sname VARCHAR2(20),CONSTRAINT stu_sid_pk PRIMARY KEY(sid)--表级定义);
注:由多个字段组合而成的主键称为联合主键
- 联合主键中每一个字段都不能为空
- 联合主键字段组合的值不能出现重复
- 联合主键只能定义为表级约束
外键(FOREIGN KEY)约束用于确保相关的两个字段之间的参照关系
- 子表字段的值必须在主表被参照字段值的范围内,或者为空值
- 外键参照的必须是主表的主键或者唯一值
- 主表主键/唯一键值被子表参照时,主表相应记录不允许被删除
CREATE TABLE salary(eid NUMBER(3) ,basic_salary NUMBER(8,2),job_allowance NUMBER(8,2),travelling_allowance NUMBER(8,2),personal_income_tax NUMBER(8,2),CONSTRAINT salary_eid_fk FOREIGN KEY (eid) REFERENCES empinfo(eid),
);
CREATE TABLE salary(eid NUMBER(3) CONSTRAINT salary_eid_fk REFERENCES empinfo(eid),...
);
注:外键约束也可以构建于同一个表内部的两个字段之间
--定义测试表,在其内部字段间定义参照完整性约束
CREATE TABLE myemp(empno NUMBER(4) PRIMARY KEY,ename VARCHAR2(20), job VARCHAR2(9),mgr NUMBER(4) REFERENCES myemp(empno),sal NUMBER(7,2)
);
检查约束用于定义数据字段必须要满足的条件,包括数据的取值范围、文本内容格式等,具体以条件表达式的形式给出。
CREATE TABLE test1(name VARCHAR2(20), age NUMBER(3),sex CHAR(2) ,CONSTRAINT test1_age_ck CHECK(age>=0 AND age <=120) );
查看约束
查询用户字典视图user_constrians,可得到用户的所有约束
SELECT * FROM user_constraints;
建表后如何添加约束
CREATE TABLE student(sid NUMBER(10),name VARCHAR2(20)
);
ALTER TABLE student
MODIFY ( name VARCHAR2(20) NOT NLL);
删除约束
ALTER TABLE student DROP CONSTRAINT student_sid_pk;
这篇关于Oracel第四讲----约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!