创建表并插入视图数据_技术干货 | 数据库安全功能之六——数据完整性

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

可以查看到数据存在

5e3195e8a7f2fea4d7611cbd1901a84e.png

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

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

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

select * from test;

可以看到数据修改成功

96548675dae7c36210e84726f0a33ae2.png

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

delete from test where id=1;

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

select * from test;

可以看到数据删除成功

0999470b9a2d24652a78dda279df0ab6.png

存储完整性

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

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');

f7fa55b80204adb29dc42802d67a2884.png

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

vi base/13245/16384

5)重启集群

6)登录数据库查询表

select * from test;

92f3cf87220732ede87de822137d7ad4.png

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

8)登录数据库查询表

select * from test;

003c46292bb097f337a355990546f763.png

实体完整性

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,'赵六');

91738e90fa5ed2b91678caf101fcb1c6.png

3) 插入主键为空的数据

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

49a7f57d3a10a884b435d482e88d9fea.png

参照完整性

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');

2b50468946929f231fec179988a3a81e.png

用户定义完整性

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');

b5b2c733df718db13f94ab929222ab47.png

3)验证默认值约束

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

select *from student where id=3;

5afe411cbc547c7102ce24efa1bf2762.png

4)验证非空约束

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

a7c81e28bd3798fe5c8fbf7173e18608.png

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

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

02d257832e1b28f0ecf095f5205a9e22.png

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 ;

99f576d9f9f313fe25f14f08c4dbbc91.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值