数据库中三个完整性规则(关系完整性的三种类型)

优炫数据库(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 ;

数据库中三个完整性规则

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

发布于 2024-05-31 15:05:22
收藏
分享
海报
0 条评论
48
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~