数据完整性包括什么 分别有哪些?

时间:2022-05-11 15:47:03 来源: 优炫软件


数据库(UXDB)的数据完整包括传输完整、存储数据完整和实体、参照、用户定义完整

用户定义基本表时,说明主键、外键,被引用表、列和引用行为。当数据录入、更新、删除时,由数据库管理系统根据说明自动维护实体完整和参照完整

系统提供定义和检查用户定义完整规则的机制,其目的是用统一的方式由系统处理,而不是由应用程序完成,从而不仅可以简化应用程序,还提高了完整保证的可靠

传输完整

传输完整,即在不同的终端用相同的用户登录相同的数据库,进行不同的操作,所有操作结果都会正确的传输到数据库中。

1)在终端1中创建一张表test

create table test (id int,info varchar(20));

2)在第2个终端,对表test进行查询并增加一条记录

insert into test values(1,'test');

3)第3个终端进行查询操作,验证数据是否存在

select * from test;

可以查看到数据存在

4)在第1个终端进行update操作

update test set info ='test1' where id=1;

5)第3个终端进行查询操作,验证数据是否修改成功

select * from test;

可以看到数据修改成功

6)在第1个终端进行delete操作

delete from test where id=1;

7)第3个终端进行查询操作,验证数据是否删除成功

select * from test;

可以看到数据删除成功

存储完整

存储完整,是为了防止存储的数据文件被篡改,一旦修改存储数据文件中的元数据,那么该数据块就会报错,无法访问。

1)创建非加密集群并启动

initdb -I -k -W -D /home/uxdb/uxdbinstall/test02

ux_ctl -I -o "-I" -D /home/uxdb/uxdbinstall/test02 start

2)登录数据库创建测试表并插入数据写入磁盘

create table test(a int,b char(10));

insert into test values (111,'aaaaa');

insert into test values (222,'bbbbb');

insert into test values (333,'ccccc');

insert into test values (444,'ddddd');

select * from test;

checkpoint;

3)确定数据在集群中的存储位置

select ux_relation_filepath('test');

4)退出控制台并进入集群目录修改存储数据文件,例如将元组信息’aaaaa’改为’aaaab’

vi base/13245/16384

5)重启集群

6)登录数据库查询表

select * from test;

7)恢复修改的元组信息(’aaaab’恢复为’aaaaa’),并重启数据库

8)登录数据库查询表

select * from test;

实体完整

1) 创建测试表并插入数据

create table student(sno integer primary key,sname char(10));

insert into student values(1,'张三');

insert into student values(2,'李四');

insert into student values(3,'王五');

2) 插入主键重复的数据

insert into student values(2,'赵六');

3) 插入主键为空的数据

insert into student(sname) values('钱七');

参照完整

1) 创建外键测试表并插入数据

create table a (id int primary key,coll varchar(4));

create table b (id_ref int ,coll varchar(4));

alter table b add constraint FK_ID foreign key(id_ref) references a(id);

insert into a values (1,'ac');

insert into b values (1,'ac');

2) 插入违反外键约束的数据

insert into b values (2,'ac');

用户定义完整

1)创建测试表

create type enum_sex as enum('M','F');

create table student (id int unique,name varchar(20)not null,class int default '150101',sex enum_sex );

2)唯一约束验证

insert into student values(1,'赵小红',150334,'M');

insert into student values(1,'张小美',150323,'M');

3)验证默认值约束

insert into student (id,name,sex) values(3,'赵文虎','F');

select *from student where id=3;

4)验证非空约束

insert into student(id,name,class,sex)values(3,null,20150609,'M');

5)验证自定义约束,执行以下SQL语句

insert into student values(6,'张小虎',20150621,'N');

6)验证触发器约束

创建测试表和触发器:

create table test_check(id varchar(20),age int);

create or replace function pro_test_check() returns trigger as

$$

begin

if new.age>=120 then

raise notice 'check fail';

return null;

else

raise notice 'check success';

return new;

end if;

end;

$$ language pluxsql;

创建触发器:

create trigger testcheck before insert on test_check for each row execute procedure pro_test_check();

插入数据测试

insert into test_check values('1200',39);

insert into test_check values('1201',120);

select * from test_check ;

第一条插入插入成功。第二条插入失败,数据未插入表中。

关键词: 数据库数据完整性 传输完整性 存储数据完整性 实体完整性


精彩推送

关于我们 加入我们 广告服务 网站地图   

All Rights Reserved, Copyright 2004-2021 www.ctocio.com.cn

如有意见请与我们联系 邮箱:29 59 11 57 8@qq.com

 IT专家网 版权所有 

豫ICP备20005723号-1

营业执照公示信息