检测oracle数据完整性,Oracle 数据完整性

1.概念

Oracle数据完整性,包括了实体完整性,域完整性,参照完整性,其作用就是保证用户输入的数据保存到数据库中是正确的。

确保数据的完整性(在创建表时给表中添加约束)。

2.分类

2.1实体完整性

实体:即表中的一行(一条记录)代表一个实体(entity)

实体完整性的作用:标识每一行数据不重复。

约束类型:

主键约束(primary key)

唯一约束(unique)

自动增长列(auto_increment)

2.1.1 主键约束(primary key)

​ 注:每个表中要有一个主键。

​ 特点:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。

示例:

第一种添加方式:

CREATE TABLE student(

id int primary key,​

name varchar(50)

);

第二种添加方式:此种方式优势在于,可以创建联合主键

CREATE TABLE student(​

id int,

name varchar(50),

primary key(id)

);

CREATE TABLE student(

classid int,

stuid int,

name varchar(50),

primary key(classid,stuid)

);

第三种添加方式:

CREATE TABLE student(

id int,

name varchar(50)

);

ALTER TABLE student  ADD  PRIMARY KEY (id);

2.1.2 唯一约束(unique)

特点:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。

CREATE TABLE student(

Id int primary key,

Name varchar(50) unique

);

2.1.3 自动增长列(auto_increment)

oracle数据库( sequence)

给主键添加自动增长的数值,列只能是整数类型

CREATE TABLE student(

Id int primary keyauto_increment,

Name varchar(50)

);

INSERT INTO student(name) values(‘tom’);

2.2域完整性

域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较,域代表当前单元格

域完整性约束:数据类型 非空约束(not null) 默认值约束(default)

check约束(mysql不支持)check(sex='男' or sex='女')

2.2.1 非空约束:not null

特点:所约束的列不能为NULL值。否则就会报错。

CREATE TABLE student(

Id int pirmary key,

Name varchar(50) not null,​

Sex varchar(10)

);

INSERT INTO student values(1,’tom’,null);

2.2.2 默认值约束 default

CREATE TABLE student(

Id int pirmary key,

Name varchar(50) not null,

Sex varchar(10) default ‘男’

);

insert intostudent1 values(1,'tom','女');

insert intostudent1 values(2,'jerry',default);

2.2.3 自定义约束(check)

特点:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。

CREATE TABLE student(

Id int pirmary key,

Name varchar(50) not null,

Sex varchar(10)

constraint sex_check check (Sex = '男' or Sex = '女')

);

2.3 参照完整性(引用完整性)

特点:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。

--1.部门表(主表)

CREATE TABLE departments(

department_id NUMBER(4),

department_name VARCHAR2(30)

CONSTRAINT dept_name_nn NOT NULL,

manager_id NUMBER(6),

location_id NUMBER(4),

CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

--2.员工表(从表)

CREATE TABLE employees(

employee_id NUMBER(6),

last_name VARCHAR2(25) NOT NULL,

email VARCHAR2(25),

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

hire_date DATE NOT NULL,

...

department_id NUMBER(4),

CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)REFERENCESdepartments(department_id),

CONSTRAINT emp_email_uk UNIQUE(email));

3.命名规范

约束名称建议自己定义一套命名规则,否则使用系统生成的约束名,很难能把它和对应的表、字段联系起来。

非空约束     NN_表名_列名

唯一约束     UK_表名_列名

主键约束     PK_表名

外键约束     FK_表名_列名

条件约束     CK_表名_列名

默认约束     DF_表名_列名

如果约束名称超过32位长度,建议应该缩写表名,而不应用NN_表名_数字。不过具体视情况而定,很多时候 DF_表名_列名 这样命名,往往超出了32字符。所以有时候需要缩写表面或是采用其它规则。

4.注意

域完整性、实体完整性及参照完整性分别在列、行、表上实施。

数据完整性任何时候都可以实施,但对已有数据的表实施数据完整性时,系统要先检查表中的数据是否满足所实施的完整性,只有表中的数据满足了所实施的完整性,数据完整性才能实施成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值